Android Broadcast – Telegram
Android Broadcast
14.4K subscribers
3.68K photos
368 videos
11 files
6.1K links
Подборка новостей и статей для Android разработчиков.

Реклама и связь с автором @ab_manager

РКН https://abdev.by/rkn_tg_ab #MQRZR
Download Telegram
#AndroidQ

Android Q Beta 2 update

Вышла вторая бета Android 10 Q. Изменения следующие:
👉 Scoped Storage теперь включено по умолчанию для устанавливаемых приложений
👉 Bubbles: новый способ многозадачности, построенный на основе системы уведомлений
👉 Эмулятор для сгибаемых (Foldable) устройств (доступно в последней canary Android Studio 3.5)
👉 Улучшение в UI шаринга: теперь можно задать заголовок или превью картинку
👉 Управление микрофоном: теперь можно задать какой микрофон использовать (если их несколько на устройстве) и задавать радиус зоны записи
👉 Больше ограничений на закрытое Android API
👉 Добавлены новые роли в RoleManager: ROLE_ASSISTANT, ROLE_CALL_REDIRECTION и ROLE_CALL_SCREENING
👉 Улучшения API
👉 Фикс багов и оптимизация

Уже доступны обновленные SDK, эмуляторы и прошивки для Pixel
👍1
Bubbles на примере уведомлений от мессенджера
👍1
#MobilePeople #Podcast #AndroidQ #GoogleIO

Mobile People Talks #0: Google I/O & Android Q

Первый выпуск подкаста Mobile People Talks вышел и в нем мы с коллегами говорили о Google I/O, Android Q и Fuchsia.

Подкаст на iTunes
Подкаст на Google Podcast
Подкаст на SoundCloud

Чтобы следить за новостями подписывайтесь на канал Mobile People Talks

Спойлер: На подходе уже второй выпуск в рамках которого мы поговорим о Flutter, зададим вопросы Саше Денисову, который сейчас занимается развитием этой экспертизы в EPAM
👍1
Слушаете ли вы профессиональные подкасты хотя бы раз в месяц?
Final Results
57%
Да
43%
Нет
👍1
#AndroidDevSipummit #Conference

Android Dev Summit 2019 пройдёт 23-24 октября в Калифорнии, США. Нас ожидают доклады от инженеров из Google и анонсы.
👍1
#GooglePlay #Subnoscriptions #GooglePlayBilling

Subnoscriptions 101 for Android Apps

Рассказ о серии видео Subnoscriptions 101 в которой подробно рассматриваются различные аспекты подписок в Google Play:
1️⃣ Understanding Subnoscriptions - описание терминоголоии
2️⃣ Subnoscription Purchase Flow - процесс покупки
3️⃣ Real-time Developer Notifications - возможность получения уведомлений о состоянии подписок пользователя
4️⃣ Upgrade and Downgrade - повышение/понижение подписок через Google Play Billing Library
5️⃣ Grace Period - возможность давать пользователю использовать все преимущества подписки если автоматическая оплата не прошла
6️⃣ Account Hold - возможность предоставления доступа к контенту приложения если у пользователя не прошла оплата подписки, но раньше он ей пользовался
7️⃣ Cancel and Restore - отмена и восстановление подписок
8️⃣ Defer Billing - предоставление временного бесплатного доступа (например при акциях)

Все видео в серии небольшого размера (1-3 минуты)
👍1
#Kotlin #Coroutines #Channels

Kotlin: Diving in to Coroutines and Channels

Прекрасный рассказ о разнице между работой асинхронности на основе Java Thread и Kotlin Coroutines на примере работы кофейни. В статье также рассматривается что значит "шаринг памяти через коммуникацию" на основе Channel.
👍1
#Kotlin #Coroutines #Exceptions

Managing exceptions in nested coroutine scopes

Обработка исключений при выполнение вложенных корутин не так очевидна как кажется и имеет свою специфику.

Например, что будет записано в файл в результате выполнения кода?
GlobalScope.launch {
val text = try {
async<String> {
throw Exception("Test")
}.await()
} catch (e: Exception) {
"error text"
}
writeToFile(text) // Suspend function
}

Правильный ответ - ничего.

Причиной тому особенности Structured Concurrency. Когда происходит исключение в async то происходит следующее:
оно передаётся во все родительские и дочерние корутины, которые останавливают свое выполнение, а те в свою очередь останавливают все корутины по аналогичному принципы.

Замечание: Здесь опущена возможность, что можно задать свой собственный CoroutineExceptionHandler в CoroutineContext

Есть несколько способ обойти это:
👉 При создание CoroutineScope используйте SupervisorJob, которая не останавливает дочерние корутины
👉 Для переключения CoroutineContext используйте withContext() вместо launch/async
👉 Выполняйте корутины, который бросают исключения в отдельной CoroutineScope. Создать такой scope можно с помощью функции coroutineScope()

Больше подробностей ищите в статье!
👍1
#AndroidAcademy #GDGMinsk #Architecture

Android Academy Minsk - Architecture Part 1 of 2

Сегодня, 8 апреля в 19.00, пройдет очередная лекция в рамках курса Android Academy Advanced в Минске. Вы сможете узнать о том как строить архитектуру приложения и какие подходы используют опытные разработчики.

Участие бесплатное, по предварительной регистрации. Количество мест ограничено!

Для всех тех кто не сможет попасть лекцию в течении нескольких дней будет доступна видео запись лекции на YouTube канале Android Academy Minsk.
👍1
How to detect if the android keyboard is open

В Android нет возможности понять показывается ли сейчас клавиатура на экране. В статье описывается лайфхак, который на основе видимой зоне на экране, и ViewTreeObserver.OnGlobalLayoutListener, добавив щепотку Lifecycle из Architecture Components, можно определять видна ли клавиатура.

Решение не без изъянов, но позволяет уже решить в проблема в самых распространенных случаях
#MVVM #Architecture #BestPractices #ArchComponents

Our Way to MVVMI and Mistakes We Made When Implementing MVVM

Лучше учиться на ошибках других. Поэтому запомните из боли разработчиков их опыт интеграции и примите следующий правила (что НЕ стоит делать) при работе с MVVM на основе Arch Components:
Передавать LiveData в качестве параметра в репозиторий и обновлять его там
Комбинировать бизнес логику и логику представления в ViewModel
Полагаться только на ViewModel для сохранения состояния между пересозданием Activity/Fragment
Не сбрасывать слушатели Repository, когда уничтожается View
Получать данные из ViewModel в View с помощь getter, а не реагировать на изменение данных через LiveData
👍1
#Course

Android Architecture Masterclass video course

Курс по архитектуре Android приложений, написанию чистого кода и разработке поддерживаемых приложений. Курс стоит $12.

Курс состоит из следующих частей:
1️⃣ MVx архитектурные паттерны
2️⃣ MVx в Android
3️⃣ Базисы MVC
4️⃣ Dependency Injection
5️⃣ Controller
6️⃣ Структура пакетов
7️⃣ Вложенные MVC View
8️⃣ Clean Architecture

Замечание: Насколько скидка реальна, и какое качество курса сказать не могу, но я уже его приобрел курс и потрачу 4.5 часа в ближайшие 2 недели, чтобы узнать это и расскажу вам
👍1
#AndroidGradlePlugin

Google Play Instant feature plugin deprecation

В Android Gradle Plugin 3.4.0 (AGP) помечены как deprecated 2 Gradle плагина: com.android.feature и com.android.instantapp. Изменения связаны с тем что в AGP 3.3.0 была добавлена поддержка Instant приложений в Android App Bundle.

Для тех кто использовал одни из старых плагинов нужно мигрировать на плагин com.android.dynamic-feature.

Руководство по миграции
👍1
#Kotlin #Coroutines #Flows

Cold flows, hot channels

На подходе обновление kotlinx.coroutines в рамках которого добавляется поддержка Flow - "холодный" стрим данных. Flow является аналогом Sequence (синхронный блокирующий), но только асинхронным на основе корутин.

Ключевым отличием Flow является что любой вызов операции такой как map(), filter() и пр. не приводит к выполнению flow. Выполнение начинается только при вызове терминальной операции, например collect.

Важно: На текущий момент Flow находится в превью, это значит что возможно изменений API и совместимости на уровне байткода, также не оптимизирована производительность.

Замечание: В предыдущей версии библиотеки kotlinx.coroutines был ReceiveChannel, который представляет из себя "горячий" стрим.
👍1
#MobilePeopleTalks #Podcast

Mobile People Talks #2 - Есть ли будущее у Flutter?

Вышел второй эпизод подкаста Mobile People Talks, в котором я с товарищами устроили допрос Александру Денисову, который занимается развитием Flutter в EPAM. В рамках допроса вы узнаете:
👉 Почему Flutter заслуживает внимание?
👉 Чем кроссплатформенные инструменты отличаются от мультиплатформенных?
👉 Почему не Kotlin?
👉 Что Flutter слизал с React?
👉 Зачем вообще для Flutter понадобился Dart?
👉 Как обстоят дела с инструментарием, библиотеками и сообществом?

Допрос устроили
👉 Данис Тазетдинов, драйвер мобильного комьюнити EPAM, автор канала по iOS разработке AppleDevNews
- Кирилл Розов, Lead GDG Minsk и SchoolKt, автор канала о Android разработке Android Broadcast
- Владимир Иванов, активный спикер, член программного комитета Mobius

Google Podcasts
Apple Podcasts
👍1
#Kotlin

Вышел Kotlin 1.3.30

Вышел очередной релиз Kotlin в рамках которого были сделаны улучшения в производительности KAPT, обновления Kotlin/Native, улучшения плагина для IDE и багфикс.

KAPT
👉Поддержка инкрементального процессинга аннотаций в KAPT (экспериментально)
👉Различные улучшения производительности KAPT

Kotlin/Native
👉Улучшения логирования крешей на iOS
👉Поддержка Cocoapods (экспериментально)
👉Улучшения в C interop
👉Поддержка Kotlin/Native в IDE

Улучшения в плагине Kotlin для IntelliJ IDEA
👉 Новые возможности для дебага корутин: “Async stack trace” - позволяет просмотреть переменные в suspend точке.
👉 Теперь будут видны настоящие названия переменных из кода, а не то что генерируются компилятором
👉 Интерактивный режим в scrath файлах: на каждой строке видны результаты выполнения кода, как в debug режиме
👉 Поддержка много строчных TODO
👉 Исправление багов
👉 Улучшения в производительности

Прочее
👉 Возможность задать версию target JVM байткода от 9 до 12
👉 Добавлена поддержка платформенных Android nullability аннотаций
👉 Исправление багов
👉 Улучшения в производительности компилятора
👍1
#GooglePlay #Subnoscriptions #Analytics

Optimize your subnoscriptions with new insights in the Play Console

В Google Play добавили новые фичи:
👉 Аналитика подписок: конвертация из триала в платную подписку, вернувшиеся подписчики и другие метрики
👉 Просмотр результатов опроса при отмене подписок. Теперь можно понять по какой причине пользователь отменяет подписку
👉 Возможно узнать эффективность grace period (предоставления подписки со скидкой на ограниченное время) и account hold (возможность использования подписки в случае если не смогла пройти автоматическое продление) для сохранения ваших подписчиков