#Новости
Всем привет! Вот уже пошел третий день как на канале не появляются новости. Я не ленюсь и все также смотрю и читаю новости, пытаюсь найти что-то интересное, но видно все авторы ушли в новогодние 🎄и рождественские 🔔праздники, в связи с чем и контента пока будет меньше чем обычно.
Вы всегда можете поскролить вверх, посмотреть ранние статьи или нажать хэштег и найти всё по интересующей вас теме.
Всем привет! Вот уже пошел третий день как на канале не появляются новости. Я не ленюсь и все также смотрю и читаю новости, пытаюсь найти что-то интересное, но видно все авторы ушли в новогодние 🎄и рождественские 🔔праздники, в связи с чем и контента пока будет меньше чем обычно.
Вы всегда можете поскролить вверх, посмотреть ранние статьи или нажать хэштег и найти всё по интересующей вас теме.
#BestPractices
The Seven (Actually 10) Cardinal Sins of Android Development
Мы все крутые программисты, но даже мы можем допустить ошибки. Спешим быстрее закончить, чтобы переключиться на новую задачу. Может сроки жмут и надо быстрее сдать или уже накрыт стол и какое тут до задач. Довольно часто причиной служит незнание каких-то аспектов.
В статье разбираются ошибки, которые не стоит допускать в вашем коде. С чем-то из этого вы будете знакомы, а с чем-то нет:
👉 Статические ссылки на Android компоненты с жизненным циклом (
👉 Неправильно получение ссылки на
👉 Хранение
👉 Аргументы в конструкторе
👉 Задание переменных
👉 Не сохранять состояние через в
👉 Загружать данные только при
👉 Инициализация
👉 Переопределение
👉 Не final static переменные
The Seven (Actually 10) Cardinal Sins of Android Development
Мы все крутые программисты, но даже мы можем допустить ошибки. Спешим быстрее закончить, чтобы переключиться на новую задачу. Может сроки жмут и надо быстрее сдать или уже накрыт стол и какое тут до задач. Довольно часто причиной служит незнание каких-то аспектов.
В статье разбираются ошибки, которые не стоит допускать в вашем коде. С чем-то из этого вы будете знакомы, а с чем-то нет:
👉 Статические ссылки на Android компоненты с жизненным циклом (
Activity
/Fragment
/View
и др.)👉 Неправильно получение ссылки на
Fragment
👉 Хранение
Fragment
в FragmentPagerAdapter
(ViewPager
)👉 Аргументы в конструкторе
Fragment
👉 Задание переменных
Fragment
с использованием set функций при создании👉 Не сохранять состояние через в
Bundle
при использование ViewModel
👉 Загружать данные только при
savedInstanceState == null
👉 Инициализация
Fragment
в некорректном состоянии👉 Переопределение
onResume()
/onPause()
для всего подряд👉 Не final static переменные
Medium
The Seven (Actually 10) Cardinal Sins of Android Development
Merry Christmas to everyone! In this article, I intend to show you a few commonly recurring mistakes that some developers make by accident…
#LiveData #Kotlin #Nullability
Improving LiveData nullability in Kotlin
Не раздражало ли вас, что при объявлении
Проблема заключается в том, что LiveData написана на Java и ничего не знает о системе типов в Kotlin и особенностях Generic. Исправить это через -ktx библиотеки не получится, так как надо переписывать LiveData на Kotlin или иметь спец аннотации для Java, чтобы обеспечивать совместимость.
В статье автор описывает не самое красивое решение, но эффективное - создание подкласса
Improving LiveData nullability in Kotlin
Не раздражало ли вас, что при объявлении
LiveData<Value>
в Kotlin, вы все равно можете получить null
в Observer
или задать null
значение через LiveData.value
? Проблема заключается в том, что LiveData написана на Java и ничего не знает о системе типов в Kotlin и особенностях Generic. Исправить это через -ktx библиотеки не получится, так как надо переписывать LiveData на Kotlin или иметь спец аннотации для Java, чтобы обеспечивать совместимость.
В статье автор описывает не самое красивое решение, но эффективное - создание подкласса
MutableLiveData
с полной поддержкой Kotlin.Medium
Improving LiveData nullability in Kotlin
LiveData’s interop with Kotlin has always been a bit tricky. This blurb shows one way to handle LiveData’s nullability in a Kotlin world.
#Coroutines #Flow #Reactive
Back-pressure in Kotlin Flows
Back-pressure - это та вещь про которую надо задумываться когда вы работает с Reactive подходами. Back-pressure - это когда источник данных посылает новые данные быстрее чем им может обработать подписчик. Из-за этого возникает необходимость задания политики что делать с очередью данных.
В статье разбирается как об Back-pressure не надо задумываться когда вы используете Coroutine Flow, благодаря suspend функциям и принципам их работы.
Back-pressure in Kotlin Flows
Back-pressure - это та вещь про которую надо задумываться когда вы работает с Reactive подходами. Back-pressure - это когда источник данных посылает новые данные быстрее чем им может обработать подписчик. Из-за этого возникает необходимость задания политики что делать с очередью данных.
В статье разбирается как об Back-pressure не надо задумываться когда вы используете Coroutine Flow, благодаря suspend функциям и принципам их работы.
Medium
Backpressure in Kotlin Flows
This is one of the best features of reactive programming and it is borrowed from fluid dynamics. Wikipedia defines it as:
#AndroidX #Browser
AndroidX Browser 1.2.0
Вышла новая мажорная версия библиотеки Browser 1.2.0 в которой произошли следующие ключевые изменения:
👉 Поддержка Trusted Web Activities вышла в Stable
👉 Поддержка темной темы для ChromeCustomTab
👉 CustomTabsSession может быть создана с заданным заранее id, что позволяет объединять сессию с одного клиента для последовательно запущенных CustomTab
AndroidX Browser 1.2.0
Вышла новая мажорная версия библиотеки Browser 1.2.0 в которой произошли следующие ключевые изменения:
👉 Поддержка Trusted Web Activities вышла в Stable
👉 Поддержка темной темы для ChromeCustomTab
👉 CustomTabsSession может быть создана с заданным заранее id, что позволяет объединять сессию с одного клиента для последовательно запущенных CustomTab
Android Developers
Browser | Jetpack | Android Developers
#Dagger #IDEA
Introducing Scabbard: Easily visualize Dagger 2 dependency graphs
Это случилось - плагин для визуализации графа зависимостей Dagger 2. И называется это счастье - Scabbard. Он позволяет увидеть Component, Subcomponent, зависимости, их Scope и отношения между ними.
Проект еще в разработке и находится в версии 0.1.0
👉 Gihub проекта
👉 Инструкция по настройке
Introducing Scabbard: Easily visualize Dagger 2 dependency graphs
Это случилось - плагин для визуализации графа зависимостей Dagger 2. И называется это счастье - Scabbard. Он позволяет увидеть Component, Subcomponent, зависимости, их Scope и отношения между ними.
Проект еще в разработке и находится в версии 0.1.0
👉 Gihub проекта
👉 Инструкция по настройке
This media is not supported in your browser
VIEW IN TELEGRAM
Пример визуализации графа из Android Studio
#AndroidOS
System App In Android
Все приложения делятся на 2 категории: системные и сторонние. Большинству разработчиков приходится сталкиваться со второй категорией приложений и распространять их через магазины приложений.
Но что могут делать системные приложения? Почему нам не дают их заменить? Почему разработчики стороннего лаунчера или звонилки не могут получить все возможности предустановленного приложения?
В статье разбираются особенности системных приложений и их возможности, которые не даны простым сторонним приложениям.
System App In Android
Все приложения делятся на 2 категории: системные и сторонние. Большинству разработчиков приходится сталкиваться со второй категорией приложений и распространять их через магазины приложений.
Но что могут делать системные приложения? Почему нам не дают их заменить? Почему разработчики стороннего лаунчера или звонилки не могут получить все возможности предустановленного приложения?
В статье разбираются особенности системных приложений и их возможности, которые не даны простым сторонним приложениям.
Medium
System App In Android
Android’s underlying kernel is based on Linux, but it has been customized to suit Google’s directions. There is no support for the GNU…
#Splash #Coroutines
A Guide on Splash Screen in Android in 2020
Экран-заставка (Splash Screen) довольно часто явление в мобильных приложениях. Цели его разные:
👉 Красивое интро в приложение
👉 Начальная Activity приложения определяется динамически
👉 Быстры рендеринг просто экрана, пока идет инициализация приложения (холодный старт)
👉 Комбинация описанных выше пунктов 😁
В статье рассматриваются рекомендации по созданию Splash Screen:
👉 Использование
👉 Как правильно отсчитывать время до закрытия Splash Screen: Handler / Timer / Coroutines
A Guide on Splash Screen in Android in 2020
Экран-заставка (Splash Screen) довольно часто явление в мобильных приложениях. Цели его разные:
👉 Красивое интро в приложение
👉 Начальная Activity приложения определяется динамически
👉 Быстры рендеринг просто экрана, пока идет инициализация приложения (холодный старт)
👉 Комбинация описанных выше пунктов 😁
В статье рассматриваются рекомендации по созданию Splash Screen:
👉 Использование
android:windowBackground
для задания фона экрана👉 Как правильно отсчитывать время до закрытия Splash Screen: Handler / Timer / Coroutines
Medium
🕐 Revisited — 📚 A Guide on Splash Screen in Android in 2020
👀 A fresh look on the splash screen in Android in Kotlin and Coroutines
#Новости
Вот и наступил новый год. Для меня 2019-й год прошёл очень бодро и с множеством событий как в работе, так и моей активности за её рамками. Одно из самых неожиданных стало для меня, что канал «Android Broadcast» прижился и я слышу положительные отзывы, а также идеи того, что сделать лучше от вас (статистику можно посмотреть выше 📈 ⬆️)
Я желаю вам в новом году активного роста высших навыков 💪, покорения новых вершин 🔝, и всего самого наилучшего вам и вашим семьям.
С большим уважением, автор канала Кирилл Розов
Вот и наступил новый год. Для меня 2019-й год прошёл очень бодро и с множеством событий как в работе, так и моей активности за её рамками. Одно из самых неожиданных стало для меня, что канал «Android Broadcast» прижился и я слышу положительные отзывы, а также идеи того, что сделать лучше от вас (статистику можно посмотреть выше 📈 ⬆️)
Я желаю вам в новом году активного роста высших навыков 💪, покорения новых вершин 🔝, и всего самого наилучшего вам и вашим семьям.
С большим уважением, автор канала Кирилл Розов
#OkHttp #Networking
Вышел OkHttp 4.3.0
Пока вчера все готовились к празднованию нового года ребята из OkHttp решили сделать новый релиз. Список изменений небольшой и имеет только одну новое важное изменение:
👉 Более агрессивное переиспользование потоков между OkHttp's HTTP/2 соединениями, connection pool, web socket-ами, и кэшем
👉 Обновление до Kotlin 1.3.61
👉 Исправление багов
Вышел OkHttp 4.3.0
Пока вчера все готовились к празднованию нового года ребята из OkHttp решили сделать новый релиз. Список изменений небольшой и имеет только одну новое важное изменение:
👉 Более агрессивное переиспользование потоков между OkHttp's HTTP/2 соединениями, connection pool, web socket-ами, и кэшем
👉 Обновление до Kotlin 1.3.61
👉 Исправление багов
#MemoryLeak #LeakCanary
Вышел LeakCanary 2.1.0
Популярная утилита для поиска утечек памяти развивается дальше. После недавне представленной версии 2.0 уже выходит следующее минорное обновление, в которое попали новые функции:
👉 Gradle плагин для обфусцированных приложений. Раньше была проблема, что при тестировании обфусцированной сборки приложения (с R8 или ProGuard) все стектрейсы было бесполезно смотреть с устройства так, как все названия классов/методов были изменены. Встречайте LeakCanary gradle плагин для обфусцированных приложений, которые решает это
👉 Множество улучшений в UI приложения для просмотра утечек памяти на устройства
👉 Улучшение документации
👉 Улучшение в API
👉 Автоматическое отключение LeakCanary, если в classpath найден заданный класс. По умолчанию этим классом является
👉 Возможность изменения способа с помощью которого LeakCanary ищет утечки памяти в heap dump
👉 Интерактивный режим работы CLI
Вышел LeakCanary 2.1.0
Популярная утилита для поиска утечек памяти развивается дальше. После недавне представленной версии 2.0 уже выходит следующее минорное обновление, в которое попали новые функции:
👉 Gradle плагин для обфусцированных приложений. Раньше была проблема, что при тестировании обфусцированной сборки приложения (с R8 или ProGuard) все стектрейсы было бесполезно смотреть с устройства так, как все названия классов/методов были изменены. Встречайте LeakCanary gradle плагин для обфусцированных приложений, которые решает это
👉 Множество улучшений в UI приложения для просмотра утечек памяти на устройства
👉 Улучшение документации
👉 Улучшение в API
Leak
и LeakTrace
👉 Автоматическое отключение LeakCanary, если в classpath найден заданный класс. По умолчанию этим классом является
org.junit.Test
👉 Возможность изменения способа с помощью которого LeakCanary ищет утечки памяти в heap dump
👉 Интерактивный режим работы CLI
#LeakCanary #Reporting #Bugsnag
LeakCanary: Uploading to Bugsnag
Авторы LeakCanary рассказали о том, как они отслеживают утечки памяти в проде и уже не пропускают ни одной из таких проблем 3 года. Делают это они с помощью выгрузки leak trace на Bugsnag. Как это реализовать вы можете найти по ссылке.
Пример как будет выглядеть отчёт в Bug Snag можно найти в посту ниже ⬇️⬇️⬇️
LeakCanary: Uploading to Bugsnag
Авторы LeakCanary рассказали о том, как они отслеживают утечки памяти в проде и уже не пропускают ни одной из таких проблем 3 года. Делают это они с помощью выгрузки leak trace на Bugsnag. Как это реализовать вы можете найти по ссылке.
Пример как будет выглядеть отчёт в Bug Snag можно найти в посту ниже ⬇️⬇️⬇️
square.github.io
Code recipes - LeakCanary
A memory leak detection library for Android
#Activity #Architecture
ActivityLifecycleCallbacks — слепое пятно в публичном API
ActivityLifecycleCallbacks - это полезное API, которое позволит вам избавиться от супер класса для всех
👉 Изменять темы для всех
👉 Отловить
👉 Отслеживать запускаемый экраны для аналитики
👉 Улучшить inject зависимостей через Dagger Android
Если вам нужно отслеживать через callback жизненный цикл
ActivityLifecycleCallbacks — слепое пятно в публичном API
ActivityLifecycleCallbacks - это полезное API, которое позволит вам избавиться от супер класса для всех
Activity
, в котором вы выполняете общие действия, или элегантно решить архитектурную задачу или сделать много чего еще полезного, о чем автор рассказывает в статье:👉 Изменять темы для всех
Activity
👉 Отловить
onActivityResult()
👉 Отслеживать запускаемый экраны для аналитики
👉 Улучшить inject зависимостей через Dagger Android
Если вам нужно отслеживать через callback жизненный цикл
Fragment
, то вы можете использовать FragmentLifecycleCallbacks.Хабр
ActivityLifecycleCallbacks — слепое пятно в публичном API
С детства я люблю читать инструкции. Я вырос, но меня до сих пор удивляет то, как взрослые люди безалаберно относятся к инструкциям: многие из них считают, что...
#Coroutines #Channel
Kotlin Coroutines in Android — Channel
Разбор Channel для предоставления набора значений (горячего):
👉 Что такое
👉
👉
👉 Закрытие
👉
👉 Типы
Kotlin Coroutines in Android — Channel
Разбор Channel для предоставления набора значений (горячего):
👉 Что такое
Channel
и с чем он схож👉
offer()
vs send()
👉
poll()
vs receive()
👉 Закрытие
Channel
👉
close()
vs cancel()
👉 Типы
Channel
: Rendezvous, Buffered, Unlimited, ConflatedMedium
Kotlin Coroutines in Android — Channel
The simplest way to realize what’s Channel and how to use it.
#UI #Performance
ViewStub: On-demand inflate view or lazily inflate layout resource
Как часто в UI вам приходится добавлять View, которые показываются по условию? Один из самых распространённые случаев - это показ UI при ошибках, отсутсвие сети или данных.
Как решают такую задачу разработчики? Зачастую просто складируют весь UI в одном Layout XML и используют
В Android SDK уже давно есть решение этому - ViewStub, которое позволяет вызывать inflate Layout XML отложено.
ViewStub: On-demand inflate view or lazily inflate layout resource
Как часто в UI вам приходится добавлять View, которые показываются по условию? Один из самых распространённые случаев - это показ UI при ошибках, отсутсвие сети или данных.
Как решают такую задачу разработчики? Зачастую просто складируют весь UI в одном Layout XML и используют
visibility=“gone|visible”
. Но проблема в таком решение заключается, что все View у которых видимость gone
и не отрисовываются на экране, но приложение тратит время на их парсинг, создание и добавление в иерархию, хотя по сути эти View могут даже не понадобиться вовсе.В Android SDK уже давно есть решение этому - ViewStub, которое позволяет вызывать inflate Layout XML отложено.
Medium
ViewStub: On-demand inflate view or lazily inflate layout resource
Sometimes while developing an application, we have encountered a situation like based on some logic, we have to render some new view in…