Size: a a a

Android Broadcast

2019 April 04
Android Broadcast
Слушаете ли вы профессиональные подкасты хотя бы раз в месяц?
Окончательные результаты
57%
Да
43%
Нет
Проголосовало: 87
источник
Android Broadcast
#AndroidDevSipummit #Conference

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

Subscriptions 101 for Android Apps

Рассказ о серии видео Subscriptions 101 в которой подробно рассматриваются различные аспекты подписок в Google Play:
1️⃣ Understanding Subscriptions - описание терминоголоии
2️⃣  Subscription 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 минуты)
источник
2019 April 07
Android Broadcast
#Kotlin #Coroutines #Channels

Kotlin: Diving in to Coroutines and Channels

Прекрасный рассказ о разнице между работой асинхронности на основе Java Thread и Kotlin Coroutines на примере работы кофейни. В статье также рассматривается что значит "шаринг памяти через коммуникацию" на основе Channel.
источник
Android Broadcast
#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()

Больше подробностей ищите в статье!
источник
2019 April 08
Android Broadcast
#AndroidAcademy #GDGMinsk #Architecture

Android Academy Minsk - Architecture Part 1 of 2

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

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

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

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

Решение не без изъянов, но позволяет уже решить в проблема в самых распространенных случаях
источник
Android Broadcast
#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
источник
Android Broadcast
#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 недели, чтобы узнать это и расскажу вам
источник
2019 April 09
Android Broadcast
источник
Android Broadcast
источник
2019 April 10
Android Broadcast
#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.

Руководство по миграции
источник
Android Broadcast
#Kotlin #Coroutines #Flows

Cold flows, hot channels

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

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

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

Замечание: В предыдущей версии библиотеки kotlinx.coroutines был ReceiveChannel, который представляет из себя "горячий" стрим.
источник
2019 April 11
Android Broadcast
#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
источник
2019 April 12
Android Broadcast
#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 аннотаций
👉 Исправление багов
👉 Улучшения в производительности компилятора
источник
Android Broadcast
#GooglePlay #Subscriptions #Analytics

Optimize your subscriptions with new insights in the Play Console

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

Внимание всем тем кто захочет обновиться до Kotlin 1.3.30 и в вашем проекте используется KtLint, то я вас огорчу - после обновления при попытке анализа происходит ошибка. Я уже создал issue в репозитории проекта и буду ждать обновления
источник
Android Broadcast
#Kotlin #Coroutines #LibUpdates

Вышла библиотека kotlinx.coroutines 1.2.0

В обновление вы можете найти:
👉Добавлены поддержка Flow - холодных каналов. Подробности в статьи Романа Елизарова "Cold flows, hot channels"
👉 Улучшение дебага корутин
👉 Dispatchers.Unconfined, MainCoroutineDispatcher.immediate, MainScope and CoroutineScope.cancel теперь стабильны
👉 withContext() теперь проверяет статус активности корутины перед выполнением
👉 Значительно улучшена скорость инициализации Dispatcher.Main
👉 Представлен CompletableJob, который теперь возвращается в результате создания Job и SupervisorJob
👉 Больше не используются приватные API на последних версиях Android
👉 Добавлена invoke() функция для Dispatcher: теперь можно вместо withContext(UI) { ... } выполнять UI { ... }
👉 Kotlin 1.3.30
👉 Исправлены баги
👉 Улучшения в производительности, генерируемом коде и обработке исключений

Важное замечание: из-за обновления Kotlin в вашем проекте вам также надо его обновить + есть сейчас проблема работы KtLint с новой версией языка.
источник
Android Broadcast
#AndroidStudio #ProjectMarbel #AndroidLint

Android Studio Project Marble: Lint Performance

Project Marbel все больше раскрывает свои детали и в четвертой статье из серии рассказывается о том, как оптимизировали скорость Android Lint.

Спойлер: в Android Studio 3.3 смогли достичь сокращения времени анализа в несколько раз на некоторых проектах.

Чтоб сделать анализ работы правил более эффективным в Google разработали утилиту Android Lint Performance Probe (ALPP). ALPP позволит вам понять какие правила для вашего проекта тратят большую часть времени или съедают много оперативки.

Также не забывайте, чтобы Android Lint работал быстро, нужно соблюдать best practices. Для этого я делал перевод руководства от Tom Norbye, автора Android Lint. Кликни сюда чтобы открыть его.
источник