#Coroutines #Library
Coroutines Operators
RxJava очень популярное решение для работы с асинхронными задачами в Android разработке. Kotlin все активнее вытесняет Java в Android проектах и разработчики стараются втягивать нативные для зыки библиотеки, примерами которых является реализация корутин.
Для того чтобы миграция проходила проще ребята из EPAM сделали библиотеку, которая портирует основные операторы и позволяет упростить процесс миграции. Библиотека опубликована в версии 0.9.0 и авторам нужно ваше ревью и обратная связь перед релизом.
Пример использования библиотеки:
Coroutines Operators
RxJava очень популярное решение для работы с асинхронными задачами в Android разработке. Kotlin все активнее вытесняет Java в Android проектах и разработчики стараются втягивать нативные для зыки библиотеки, примерами которых является реализация корутин.
Для того чтобы миграция проходила проще ребята из EPAM сделали библиотеку, которая портирует основные операторы и позволяет упростить процесс миграции. Библиотека опубликована в версии 0.9.0 и авторам нужно ваше ревью и обратная связь перед релизом.
Пример использования библиотеки:
val firstName = async { "James" }val secondName = async { "Kirk" }zip(first, second) { first: String, second: String -> "$first $second" // Результат = "James Kirk"}GitHub
GitHub - epam/CoroutinesExtensions: To modify data RxJava provides a lot of methods, but Kotlin Coroutines doesn’t have them. This…
To modify data RxJava provides a lot of methods, but Kotlin Coroutines doesn’t have them. This library’s goal is creating functions that will provide users possibility to use the same functional as...
#Lite #Architecture #Optimizations
Expanding Access: Engineering Uber Lite
История того как в Uber пришли к тому что им надо разрабатывать Lite версию приложения из-за того что множество устройств, на которых используется приложения - это модели 2015 года и более раненого выпуска
Основные принципы которыми руководствовались разработчики:
👉 Компактный размер
👉 Минимизация расхода трафика и запросов на сервер
👉 Высокая отзывчивость UI (< 300 мс при переходе между экранами)
👉 1 DEX
Какие вопросы пришлось решать:
❓ Поиск компактных библиотек
❓ Выбор архитектуры приложения
❓ ProGuard, ReDex и Android App Bundle
❓ Настройка CI для проверок соблюдения ограничений
Expanding Access: Engineering Uber Lite
История того как в Uber пришли к тому что им надо разрабатывать Lite версию приложения из-за того что множество устройств, на которых используется приложения - это модели 2015 года и более раненого выпуска
Основные принципы которыми руководствовались разработчики:
👉 Компактный размер
👉 Минимизация расхода трафика и запросов на сервер
👉 Высокая отзывчивость UI (< 300 мс при переходе между экранами)
👉 1 DEX
Какие вопросы пришлось решать:
❓ Поиск компактных библиотек
❓ Выбор архитектуры приложения
❓ ProGuard, ReDex и Android App Bundle
❓ Настройка CI для проверок соблюдения ограничений
Uber Blog
Expanding Access: Engineering Uber Lite | Uber Blog
Many people around the world use Android phones based on hardware developed in 2015 and earlier. Uber engineers explain how they developed a lightweight rider app to serve this global audience.
#UI #HowItWorks #Text
Android’s Font Renderer - Efficient text rendering with OpenGL ES
Отрисовка текста очень непростая задача и ресурсоёмкая для устройства. О том как работает механизм отрисовки текста в Android, с какие задачи решали разработчики чтобы сделать процесс отрисовки текста быстрым.
В статье раскрываются:
👉 libhwui - движок для отрисовки 2D на Android 3.0
👉 Работа Skia
👉 Изменения в Android 4.4: HarfBuzz, TextLayoutCache
👉 Растеризация и кэширование
👉 Альтернативы растеризации
👉 Кэширование до использования шрифтов
👉 Очистка кэша
👉 Оптимизация
Android’s Font Renderer - Efficient text rendering with OpenGL ES
Отрисовка текста очень непростая задача и ресурсоёмкая для устройства. О том как работает механизм отрисовки текста в Android, с какие задачи решали разработчики чтобы сделать процесс отрисовки текста быстрым.
В статье раскрываются:
👉 libhwui - движок для отрисовки 2D на Android 3.0
👉 Работа Skia
👉 Изменения в Android 4.4: HarfBuzz, TextLayoutCache
👉 Растеризация и кэширование
👉 Альтернативы растеризации
👉 Кэширование до использования шрифтов
👉 Очистка кэша
👉 Оптимизация
#AndroidX #ViewPager #RecyclerView
ViewPager2 Alpha 1
Google показала ViewPager2. Основные изменения:
👉 Обратной совместимости нет
👉 Базируется на RecyclerView
👉 Реализована поддержка RTL
👉 Поддержка вертикальной ориентации
👉 Модифицируемый контент, когда элементами являются Fragment
Ждем стабильной версий
ViewPager2 Alpha 1
Google показала ViewPager2. Основные изменения:
👉 Обратной совместимости нет
👉 Базируется на RecyclerView
👉 Реализована поддержка RTL
👉 Поддержка вертикальной ориентации
👉 Модифицируемый контент, когда элементами являются Fragment
Ждем стабильной версий
#Security #Encryption
Introducing Adiantum: Encryption for the Next Billion Users
Google представила новый формат шифрования - Adiantum, который предназначен для запуска на телефонах и умных устройствах, которые не имеют специального железа/чипа для шифрования на аппаратном уровне.
Необходимость такого формата связана с тем что новый миллиард устройств - это Индия, страны Африки и Южной Америки, где покупаются дешевые устройства, который работают на старых версиях ОС или Android GO + такие устройства в основе используют процессоры на основе архитектуры ARM Cortex-A7, который не имеют аппаратного шифрования.
Introducing Adiantum: Encryption for the Next Billion Users
Google представила новый формат шифрования - Adiantum, который предназначен для запуска на телефонах и умных устройствах, которые не имеют специального железа/чипа для шифрования на аппаратном уровне.
Необходимость такого формата связана с тем что новый миллиард устройств - это Индия, страны Африки и Южной Америки, где покупаются дешевые устройства, который работают на старых версиях ОС или Android GO + такие устройства в основе используют процессоры на основе архитектуры ARM Cortex-A7, который не имеют аппаратного шифрования.
Google Online Security Blog
Introducing Adiantum: Encryption for the Next Billion Users
Posted by Paul Crowley and Eric Biggers, Android Security & Privacy Team Storage encryption protects your data if your phone falls in...
#Room #Coroutines
Room 🔗 Coroutines
Room 2.1 добавил поддержку Kotlin Coroutines. Теперь Room DAO можно описывать следующим образом:
В статье описаются детали как механизм работает под капотом
Room 🔗 Coroutines
Room 2.1 добавил поддержку Kotlin Coroutines. Теперь Room DAO можно описывать следующим образом:
@DaointerfaceUsersDao { @Query("SELECT * FROM users") suspend fun getUsers(): List<User> @Insert suspend fun insertUser(user: User) @Update suspend fun updateUser(user: User) @Delete suspend fun deleteUser(user: User)}В статье описаются детали как механизм работает под капотом
Medium
Room 🔗 Coroutines
Add some suspense to your database
#Chromium #PWA #TrustedWeb
Introducing a Trusted Web Activity for Android
В Chromium 72 официально анонсировали поддержку Trusted Web Activity (TWA). Это позволяет вашему приложению отображать Web контент в Chrome Custom tab или WebView без UI браузера в полноэкранном режиме.
Introducing a Trusted Web Activity for Android
В Chromium 72 официально анонсировали поддержку Trusted Web Activity (TWA). Это позволяет вашему приложению отображать Web контент в Chrome Custom tab или WebView без UI браузера в полноэкранном режиме.
Chromium Blog
Introducing a Trusted Web Activity for Android
A Trusted Web Activity (TWA) displays a full screen Chrome browser inside of an Android app with no browser UI. Although Android apps rout...
#PWA
Play Store теперь принимает прогрессивные веб-приложения (PWA)
Статья поможет вам в первых шагах с Progressive Web Apps (PWA):
👉 Преимущества перед стандартными PWA
👉 Является ли TWA гибридным фреймворком, похожим на Cordova?
👉 Требования Play Store
👉 Способы разработки
👉 Ограничения
👉 Создание первого APK с PWA
👉 Тестирование
Play Store теперь принимает прогрессивные веб-приложения (PWA)
Статья поможет вам в первых шагах с Progressive Web Apps (PWA):
👉 Преимущества перед стандартными PWA
👉 Является ли TWA гибридным фреймворком, похожим на Cordova?
👉 Требования Play Store
👉 Способы разработки
👉 Ограничения
👉 Создание первого APK с PWA
👉 Тестирование
Хабр
Play Store теперь принимает прогрессивные веб-приложения (PWA)
Дисклеймер: я не связан с Google Play, Chrome или любой упомянутой компанией. Это не официальное заявление. Логотип и названия используются только для иллюстрации. В Chrome 72 для Android...
#ANR
Причины возникновения ANR и как этого избежать
Application Not Responding (ANR) - это ошибка, которая возникает в результате приложение не отвечает. Условия возникновения ANR:
👉События ввода (кнопки, касания экрана и пр.) не обрабатываются 5 секунд
👉BroadcastReceiver.onReceive() не был обработан за отведенное время (foreground приложение - 10 сек, background - 60 сек)
👉ContentProvider не завершил выполнение в течение 10 секунд
Как избежать ANR:
👉 Вся работа, несвязанная с отображение, должна выноситься в фоновые потоки
👉 Сложные вычисления производятся в отдельном потоке
👉 Используйте Handler для взаимодействия между Main/UI потоком приложения и рабочими потоками
Удобными способами для выполнения операций в фоне является использование библиотек RxJava или Kotlin Coroutines
В статье также описывается откуда прорастает показ ANR диалога и как он показывается
Причины возникновения ANR и как этого избежать
Application Not Responding (ANR) - это ошибка, которая возникает в результате приложение не отвечает. Условия возникновения ANR:
👉События ввода (кнопки, касания экрана и пр.) не обрабатываются 5 секунд
👉BroadcastReceiver.onReceive() не был обработан за отведенное время (foreground приложение - 10 сек, background - 60 сек)
👉ContentProvider не завершил выполнение в течение 10 секунд
Как избежать ANR:
👉 Вся работа, несвязанная с отображение, должна выноситься в фоновые потоки
👉 Сложные вычисления производятся в отдельном потоке
👉 Используйте Handler для взаимодействия между Main/UI потоком приложения и рабочими потоками
Удобными способами для выполнения операций в фоне является использование библиотек RxJava или Kotlin Coroutines
В статье также описывается откуда прорастает показ ANR диалога и как он показывается
Хабр
Причины возникновения ANR и как этого избежать
ANR (Application Not Responding) — ошибка, которая возникает, когда приложение не отвечает. В итоге открывается диалоговое окно, предлагающее пользователю подожд...
#ANR #Library
ANR-WatchDog - A simple watchdog that detects Android ANR error and throws a meaningful exception
Единственный способ для Android приложения поймать ANR - это опубликовать его в Google Play и смотреть за их статистикой в консоле.Очень полезно получать ошибки с ANR во время разработки и тестирования.
Библиотека ANR-WatchDog призвана решить эту проблема. Она настраивает таймеры на определение того, что ваш Main/UI поток не отвечает. Если такое событие происходит, библиотека выбрасывает ошибку
Подключение библиотеки
В Application.onCreate() добавьте
Рекомендую подключать библиотеку только в тестовых сборках вашего приложения и не включать его в production.
ANR-WatchDog - A simple watchdog that detects Android ANR error and throws a meaningful exception
Единственный способ для Android приложения поймать ANR - это опубликовать его в Google Play и смотреть за их статистикой в консоле.Очень полезно получать ошибки с ANR во время разработки и тестирования.
Библиотека ANR-WatchDog призвана решить эту проблема. Она настраивает таймеры на определение того, что ваш Main/UI поток не отвечает. Если такое событие происходит, библиотека выбрасывает ошибку
ANRError. При включенном дебагере библиотека отключается.Подключение библиотеки
implementation 'com.github.anrwatchdog:anrwatchdog:1.3.0'В Application.onCreate() добавьте
new ANRWatchDog().start();Рекомендую подключать библиотеку только в тестовых сборках вашего приложения и не включать его в production.
GitHub
GitHub - SalomonBrys/ANR-WatchDog: A simple watchdog that detects Android ANR (Application Not Responding) error and throws a meaningful…
A simple watchdog that detects Android ANR (Application Not Responding) error and throws a meaningful exception - SalomonBrys/ANR-WatchDog
#Kotlin
The Argument Over Kotlin Synthetics
Kotlin Android Extensions призваны упростить жизнь Android разработчиков, они включают в себя:
👉 View Binding (отказ от findViewById)
👉 Generation of Parcelable (не надо руками писать реализацию)
Какова цена за эти удобства? Действительно ли все так удобно. Автор статьи решил рассмотреть почему не стоит использовать View Binding:
➖ Доступны только из Kotlin
➖ Не поддерживается Nullability
➖ Нет гарантий что сгенерированный код будет производительным
➖ Все находиться в глобальном пространстве имен
➖ Нет гарантий типов
The Argument Over Kotlin Synthetics
Kotlin Android Extensions призваны упростить жизнь Android разработчиков, они включают в себя:
👉 View Binding (отказ от findViewById)
👉 Generation of Parcelable (не надо руками писать реализацию)
Какова цена за эти удобства? Действительно ли все так удобно. Автор статьи решил рассмотреть почему не стоит использовать View Binding:
➖ Доступны только из Kotlin
➖ Не поддерживается Nullability
➖ Нет гарантий что сгенерированный код будет производительным
➖ Все находиться в глобальном пространстве имен
➖ Нет гарантий типов
Medium
The Argument Over Kotlin Synthetics
It all started with a commit message
#UI #Design
State of the Navigation Drawer
Navigation Drawer присутствует довольно давно в Android приложениях, но он имеет минусы:
➖ сокрытие навигации с экрана
➖ разработчики порой его перегружают элементами
➖ пользователи не видят новый функционал, которая добавляется в приложения
Как альтернатива Drawer предлагается использовать Bottom Navigation. Он позволяет решить проблемы, присущие Drawer, но также имеет ограничения, например он располагает от 3 до 5 элементов.
В своих последних приложения Google стала использовать комбинированный подход с Drawer и Bottom App Bar
Что сейчас имеет место и есть ли универсальное решение? Вопрос как всегда философский и не имеет четкого ответа. В статье автор сделал обзор существующих решений и их эффективности.
State of the Navigation Drawer
Navigation Drawer присутствует довольно давно в Android приложениях, но он имеет минусы:
➖ сокрытие навигации с экрана
➖ разработчики порой его перегружают элементами
➖ пользователи не видят новый функционал, которая добавляется в приложения
Как альтернатива Drawer предлагается использовать Bottom Navigation. Он позволяет решить проблемы, присущие Drawer, но также имеет ограничения, например он располагает от 3 до 5 элементов.
В своих последних приложения Google стала использовать комбинированный подход с Drawer и Bottom App Bar
Что сейчас имеет место и есть ли универсальное решение? Вопрос как всегда философский и не имеет четкого ответа. В статье автор сделал обзор существующих решений и их эффективности.
Medium
State of the Navigation Drawer
UI design patterns evolve. Some come into fashion and some go out of fashion. A pattern, once common, over used, and pervasive has been…
#AndroidX #ViewPager2 #HowItWorks
ViewPager2 under the Hood
На днях Google представила первую альфа версию ViewPager2. Я писал об это ранее. В статье разбирается как работает под капотом ViewPager2 и каким образом перенесли функциональность ViewPager на RecyclerView.
ViewPager2 under the Hood
На днях Google представила первую альфа версию ViewPager2. Я писал об это ранее. В статье разбирается как работает под капотом ViewPager2 и каким образом перенесли функциональность ViewPager на RecyclerView.
helw.net
ViewPager2 under the Hood
blog of ahmed el-helw
#Kotlin #NullSafety
Null is your friend, not a mistake
Null - это бич Java разработки или нет? Очень неприятно когда у вас падает NPE 😞. Чтобы это исправить было сделано много разных решений:
👉
👉 Optional Java 8
👉 Невозможность работы с
👉 Куча
👉 Статические анализаторы кода
Все решения имеют свои плюсы + работают не всегда.
Kotlin решил эту проблемы намного изящнее все типы делятся на Nullable и NonNullable, который четко определяют можно ли быть у вас null значение в типе и при обращение будет заставлять обрабатывать.
Роман Элизаров (папка Kotlin Coroutines) в статье рассказывает почему null - это не есть зло и как Kotlin эффективно организовал работу с такими типами значений!
Null is your friend, not a mistake
Null - это бич Java разработки или нет? Очень неприятно когда у вас падает NPE 😞. Чтобы это исправить было сделано много разных решений:
👉
@Nullable, @NonNull аннотации👉 Optional Java 8
👉 Невозможность работы с
null, например RxJava 2 типы не могут эмитировать null значения👉 Куча
if(value != null)👉 Статические анализаторы кода
Все решения имеют свои плюсы + работают не всегда.
Kotlin решил эту проблемы намного изящнее все типы делятся на Nullable и NonNullable, который четко определяют можно ли быть у вас null значение в типе и при обращение будет заставлять обрабатывать.
Роман Элизаров (папка Kotlin Coroutines) в статье рассказывает почему null - это не есть зло и как Kotlin эффективно организовал работу с такими типами значений!
Medium
Null is your friend, not a mistake
NullPointerException is dreaded in Java. All sorts of workarounds exist to avoid nulls. Fear not. They are not needed with Kotlin.
#RecyclerView #Animation #DiffUtil
RecyclerView — time to animate! (with payloads and DiffUtil)
Что вы знаете о
В статье раскрываются подробности как анимировать изменения RecyclerView на основе описанного механизма.
RecyclerView — time to animate! (with payloads and DiffUtil)
Что вы знаете о
payload в RecyclerView.Adapter.notifyItemChanged(int position, Object payload) ? Она позволяет вам сообщать что изменилось, а не заставляет обновить целый элемент в RecyclerView. DiffUtil также поддерживаются payload и позволяет вам точечно обновлять элементы списка. В статье раскрываются подробности как анимировать изменения RecyclerView на основе описанного механизма.
Undabot
RecyclerView — time to animate! (with payloads and DiffUtil)
Throughout this post I will explain how to initiate default RecyclerView animations. The focus will be on the payloads and DiffUtil…
#R8 #Optimizations #String
R8 Optimization: String Constant Operations
Продолжение серии статей от Jake Wharton о оптимизациях в R8. В новой статье рассказывает о оптимизация строковых констант:
👉 Операции со строками
👉 Встраивание
👉 Оценка эффективности оптимизаций
R8 Optimization: String Constant Operations
Продолжение серии статей от Jake Wharton о оптимизациях в R8. В новой статье рассказывает о оптимизация строковых констант:
👉 Операции со строками
👉 Встраивание
👉 Оценка эффективности оптимизаций
Jake Wharton
R8 Optimization: String Constant Operations – Jake Wharton
#IoT #AndroidThings
An Update on Android Things
Google меняет фокус Android Things как платформу для OEM партнеров для того чтобы делать умные колонки и дисплее.
An Update on Android Things
Google меняет фокус Android Things как платформу для OEM партнеров для того чтобы делать умные колонки и дисплее.
Android Developers Blog
An Update on Android Things
Posted by Dave Smith , Developer Advocate for IoT Over the past year, Google has worked closely with partners to create consumer product...
#Architecture #RIBs
RIBs - Uber's cross-platform mobile architecture framework
Uber открыла доступ к своей библиотеке RIBs, которая позволяет создавать кросс-платформенную архитектуру для Android и iOS приложений. Фреймворк разрабатывался для мобильных приложений с большим количеством разработчиков.
Остается ждать насколько она приживётся
RIBs - Uber's cross-platform mobile architecture framework
Uber открыла доступ к своей библиотеке RIBs, которая позволяет создавать кросс-платформенную архитектуру для Android и iOS приложений. Фреймворк разрабатывался для мобильных приложений с большим количеством разработчиков.
Остается ждать насколько она приживётся
👍1
#LibUpdates #ButterKnife #JakeWharton
ButterKnife 10.1.0 was released
Вышло обновление ButterKnife 10.1.0. Что нового:
👉 Слушатель для OnLongClickListener больше не требует возвращения
👉 Добавлена поддержка @OnTextChanged и @OnPageChange в
👉 Улучшения в
ButterKnife 10.1.0 was released
Вышло обновление ButterKnife 10.1.0. Что нового:
👉 Слушатель для OnLongClickListener больше не требует возвращения
boolean и может возвращать void👉 Добавлена поддержка @OnTextChanged и @OnPageChange в
butterknife-reflect👉 Улучшения в
butterknife-reflectGitHub
butterknife/CHANGELOG.md at master · JakeWharton/butterknife
Bind Android views and callbacks to fields and methods. - JakeWharton/butterknife
#ThreeTen #Backport #JakeWharton
ThreeTenABP 1.1.2
Вышло очередное обновление ThreeTenABP - обертка библиотеки ThreeTen бекпорта Java 8 Data/Time API. Релиз обновил базу данных по временным зонам и обновил базируемую версию ThreeTen до 1.3.8
ThreeTenABP 1.1.2
Вышло очередное обновление ThreeTenABP - обертка библиотеки ThreeTen бекпорта Java 8 Data/Time API. Релиз обновил базу данных по временным зонам и обновил базируемую версию ThreeTen до 1.3.8
GitHub
Release 1.1.2 · JakeWharton/ThreeTenABP
Version 1.1.2