#MobilePeople #Podcast #GoogleIO #EPAM
EPAM активно поддерживает около ITшные сообщества разработчиков по разным направлениям. Одно из таких сообществ - Mobile People. В рамках этой инициативы зародился подкаст Mobile People Talks - подкаст про мобильную разработку с взглядами из различным направлений.
Я очень рад что смог стать частью этого (спасибо Данису Тазетдинову за приглашение).
В первом выпуске мы обсудили предстоящий Google I/O: Android Q, куда все движется, чего каждый из нас ждет и как всегда похоливарили 😁
EPAM активно поддерживает около ITшные сообщества разработчиков по разным направлениям. Одно из таких сообществ - Mobile People. В рамках этой инициативы зародился подкаст Mobile People Talks - подкаст про мобильную разработку с взглядами из различным направлений.
Я очень рад что смог стать частью этого (спасибо Данису Тазетдинову за приглашение).
В первом выпуске мы обсудили предстоящий Google I/O: Android Q, куда все движется, чего каждый из нас ждет и как всегда похоливарили 😁
👍1
Какую библиотеку для загрузки изображений используете вы в своих последних приложениях?
Final Results
80%
Glide (bumptech.github.io/glide/)
11%
Picasso (square.github.io/picasso)
2%
Universal Image Loader (github.com/nostra13/Android-Universal-Image-Loader)
0%
Facebook Fresco (frescolib.org)
0%
Другая библиотека
2%
Androiв SDK only
6%
Не работаю с изображениями
👍1
#Glide #Image #Cache
Best strategy to load images using Glide
Glide - это довольно популярное решение для загрузки изображений. Я использую именно за его широкие возможности, поддержку добавления загрузки и кэширования собственных типов данных и широкие возможности по пост обработки изображения перед показом картинки пользователю.
В статье выше нашел пару интересных моментов по использованию Glide:
👉 Добавляйте url превью картинки более мелкого размера (thumbnail), это позволит показать результат пользователю быстрее но в более низком качестве
👉 Выполняйте периодическую очистку кэша. Например, можно создать периодическую Work, использую WorkManager, которая будет очищать старый кэш.
Best strategy to load images using Glide
Glide - это довольно популярное решение для загрузки изображений. Я использую именно за его широкие возможности, поддержку добавления загрузки и кэширования собственных типов данных и широкие возможности по пост обработки изображения перед показом картинки пользователю.
В статье выше нашел пару интересных моментов по использованию Glide:
👉 Добавляйте url превью картинки более мелкого размера (thumbnail), это позволит показать результат пользователю быстрее но в более низком качестве
👉 Выполняйте периодическую очистку кэша. Например, можно создать периодическую Work, использую WorkManager, которая будет очищать старый кэш.
Medium
Best strategy to load images using Glide — Image loading library for Android
Glide is an Image Loader Library for Android developed by bumptech and is a library that is recommended by Google. It has been used in…
👍1
Android Broadcast
Какую библиотеку для загрузки изображений используете вы в своих последних приложениях?
По итогам опроса о популярности библиотеки для загрузки изображений победителем стал Glide 🎉🎉🎉
👍1
#ART #Performance
Improving app performance with ART optimizing profiles in the cloud
В Android 9.0 Pie была запущены оптимизирующие профили ART в Play Cloud, которое позволило ускорить запуск приложения в среднем около 15% без необходимости какой-либо оптимизации со стороны разработчиков приложений.
В статье подробно освещается механизм работы эту функции:
👉 Сбор информации для профилей
👉 DEX метадата
👉 Структура профилей
Improving app performance with ART optimizing profiles in the cloud
В Android 9.0 Pie была запущены оптимизирующие профили ART в Play Cloud, которое позволило ускорить запуск приложения в среднем около 15% без необходимости какой-либо оптимизации со стороны разработчиков приложений.
В статье подробно освещается механизм работы эту функции:
👉 Сбор информации для профилей
👉 DEX метадата
👉 Структура профилей
Android Developers Blog
Improving app performance with ART optimizing profiles in the cloud
Posted by Calin Juravle, Software Engineer In Android Pie we launched ART optimizing profiles in Play Cloud , a new optimization feat...
👍1
#Dagger #DependencyInjection #Square
Dagger Assisted Injection
Для всех те кто решал проблему Dagger 2 с передачей параметров в зависимости, Square сделали толковое решение - Assisted Inject, которое позволяет избавиться от создания дополнительных компонентов или не задавать зависимости через setter-ы после их создания.
Рассмотрим пример:
Параметры
Следующим шагом нам нужна фабрика для создания нашей зависимости:
Фабрика позволит нам создавать зависимости, передавая туда необходимые параметры.
Библиотека сейчас находится в версии 0.3.3, но работает без проблем, проверено личной мной на production проекте.
Все подробности полной реализации вы можете найти в статье.
Gtihub Assisted Inject
Dagger Assisted Injection
Для всех те кто решал проблему Dagger 2 с передачей параметров в зависимости, Square сделали толковое решение - Assisted Inject, которое позволяет избавиться от создания дополнительных компонентов или не задавать зависимости через setter-ы после их создания.
Рассмотрим пример:
class TextPresenter @AssistedInject constructor( @Assisted val view: TextView, @Assisted val text: String, val textDecorator: TextDecorator)Параметры
view и text не находятся в графе зависимостей и поэтому мы не можем получить оттуда, и мы помечаем их с помощью @Assisted, что говорит о том что они будут задаваться динамически.Следующим шагом нам нужна фабрика для создания нашей зависимости:
class TextPresenter { @AssistedInject.Factory interface Factory { fun create( view: TextView, text: String ): TextPresenter }}Фабрика позволит нам создавать зависимости, передавая туда необходимые параметры.
Библиотека сейчас находится в версии 0.3.3, но работает без проблем, проверено личной мной на production проекте.
Все подробности полной реализации вы можете найти в статье.
Gtihub Assisted Inject
👍1
Считаете ли Вы, что Android разработчик должен пользоваться Android устройством, чтобы понимать платформу как пользователь?
Final Results
56%
Однозначно использовать Android!
27%
Android, iOS, да хоть Windows Phone, всё равно
17%
Хочу увидеть результаты
👍1
#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