#Dagger #LibUpdates #DependencyInjection
Вышел Dagger 2.22
Вышел Dagger 2.22. В новом релизе нас ждут:
👉 Теперь создавать компоненты можно не только с помощью Builder (помечая интерфейс
👉
👉 Публичные модули могут включать непубличные
👉 Улучшение производительности процессора аннотаций и сгенерированного кода
👉 Прочие мелкие улучшения
Версия уже доступна и Вы можете начать обновление!
Вышел Dagger 2.22
Вышел Dagger 2.22. В новом релизе нас ждут:
👉 Теперь создавать компоненты можно не только с помощью Builder (помечая интерфейс
@Component.Builder), но и фабрикой с единственным методом, принимающим все параметры (для этого используйте @Component.Factory)👉
@BindsInstance теперь можно применять к параметрам метода. Это сделано для поддержка Factory у Component👉 Публичные модули могут включать непубличные
👉 Улучшение производительности процессора аннотаций и сгенерированного кода
👉 Прочие мелкие улучшения
Версия уже доступна и Вы можете начать обновление!
👍1
#Firebase #MLKit #MachineLearning
ML Kit expands into NLP with Language Identification and Smart Reply
Firebase ML Kit - это простой способ интеграции машинного обучения в ваше приложение. Разработчики этой библиотеки добавили поддержку новых функций: распознавание языков и Smart Reply.
Распознавание языков
Это API позволяет вам определять язык текста. Поддерживается 110 языков из разных групп: латиница, кириллица, иероглифы и пр.
Smart Reply
С помощью Smart Reply вы можете генерировать ответы на основе переписки. Например, можно использовать это для быстрых ответах в уведомлениях.
В текущее время поддерживается только английский язык.
ML Kit expands into NLP with Language Identification and Smart Reply
Firebase ML Kit - это простой способ интеграции машинного обучения в ваше приложение. Разработчики этой библиотеки добавили поддержку новых функций: распознавание языков и Smart Reply.
Распознавание языков
Это API позволяет вам определять язык текста. Поддерживается 110 языков из разных групп: латиница, кириллица, иероглифы и пр.
Smart Reply
С помощью Smart Reply вы можете генерировать ответы на основе переписки. Например, можно использовать это для быстрых ответах в уведомлениях.
В текущее время поддерживается только английский язык.
👍1
#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
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
#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
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
👍1
#AndroidDevSipummit #Conference
Android Dev Summit 2019 пройдёт 23-24 октября в Калифорнии, США. Нас ожидают доклады от инженеров из Google и анонсы.
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 минуты)
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 минуты)
Medium
Subnoscriptions 101 for Android Apps
Subnoscriptions on Google Play Billing can be an excellent way to grow your business. However, coordinating between your Android app and…
👍1
#Kotlin #Coroutines #Channels
Kotlin: Diving in to Coroutines and Channels
Прекрасный рассказ о разнице между работой асинхронности на основе Java Thread и Kotlin Coroutines на примере работы кофейни. В статье также рассматривается что значит "шаринг памяти через коммуникацию" на основе Channel.
Kotlin: Diving in to Coroutines and Channels
Прекрасный рассказ о разнице между работой асинхронности на основе Java Thread и Kotlin Coroutines на примере работы кофейни. В статье также рассматривается что значит "шаринг памяти через коммуникацию" на основе Channel.
Medium
Kotlin: Diving in to Coroutines and Channels
An illustrated guide to coroutines and channels in Kotlin
👍1
#Kotlin #Coroutines #Exceptions
Managing exceptions in nested coroutine scopes
Обработка исключений при выполнение вложенных корутин не так очевидна как кажется и имеет свою специфику.
Например, что будет записано в файл в результате выполнения кода?
Правильный ответ - ничего.
Причиной тому особенности Structured Concurrency. Когда происходит исключение в
оно передаётся во все родительские и дочерние корутины, которые останавливают свое выполнение, а те в свою очередь останавливают все корутины по аналогичному принципы.
Замечание: Здесь опущена возможность, что можно задать свой собственный CoroutineExceptionHandler в CoroutineContext
Есть несколько способ обойти это:
👉 При создание CoroutineScope используйте SupervisorJob, которая не останавливает дочерние корутины
👉 Для переключения CoroutineContext используйте withContext() вместо launch/async
👉 Выполняйте корутины, который бросают исключения в отдельной CoroutineScope. Создать такой scope можно с помощью функции coroutineScope()
Больше подробностей ищите в статье!
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.
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, можно определять видна ли клавиатура.
Решение не без изъянов, но позволяет уже решить в проблема в самых распространенных случаях
В Android нет возможности понять показывается ли сейчас клавиатура на экране. В статье описывается лайфхак, который на основе видимой зоне на экране, и ViewTreeObserver.OnGlobalLayoutListener, добавив щепотку Lifecycle из Architecture Components, можно определять видна ли клавиатура.
Решение не без изъянов, но позволяет уже решить в проблема в самых распространенных случаях
Medium
How to detect if the android keyboard is open
You want to know, at this moment, if the android keyboard is open. Easy right? Unfortunately not.
#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
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
Medium
Our Way to MVVMI and Mistakes We Made When Implementing MVVM
My story on this project started with the management’s decision of refactoring it as developers had hit the wall with “God” Activities…
👍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 недели, чтобы узнать это и расскажу вам
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 плагина:
Для тех кто использовал одни из старых плагинов нужно мигрировать на плагин
Руководство по миграции
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 является что любой вызов операции такой как
Важно: На текущий момент Flow находится в превью, это значит что возможно изменений API и совместимости на уровне байткода, также не оптимизирована производительность.
Замечание: В предыдущей версии библиотеки kotlinx.coroutines был ReceiveChannel, который представляет из себя "горячий" стрим.
Cold flows, hot channels
На подходе обновление kotlinx.coroutines в рамках которого добавляется поддержка Flow - "холодный" стрим данных. Flow является аналогом Sequence (синхронный блокирующий), но только асинхронным на основе корутин.
Ключевым отличием Flow является что любой вызов операции такой как
map(), filter() и пр. не приводит к выполнению flow. Выполнение начинается только при вызове терминальной операции, например collect.Важно: На текущий момент Flow находится в превью, это значит что возможно изменений API и совместимости на уровне байткода, также не оптимизирована производительность.
Замечание: В предыдущей версии библиотеки kotlinx.coroutines был ReceiveChannel, который представляет из себя "горячий" стрим.
👍1