Size: a a a

Android Broadcast

2019 December 30
Android Broadcast
#Coroutines #Flow #Reactive

Back-pressure in Kotlin Flows

Back-pressure - это та вещь про которую надо задумываться когда вы работает с Reactive подходами. Back-pressure - это когда источник данных посылает новые данные быстрее чем им может обработать подписчик. Из-за этого возникает необходимость задания политики что делать с очередью данных.

В статье разбирается как об Back-pressure не надо задумываться когда вы используете Coroutine Flow, благодаря suspend функциям и принципам их работы.
источник
Android Broadcast
#AndroidX #Browser

AndroidX Browser 1.2.0

Вышла новая мажорная версия библиотеки Browser 1.2.0 в которой произошли следующие ключевые изменения:
👉 Поддержка Trusted Web Activities вышла в Stable
👉 Поддержка темной темы для ChromeCustomTab
👉 CustomTabsSession может быть создана с заданным заранее id, что позволяет объединять сессию с одного клиента для последовательно запущенных CustomTab
источник
Android Broadcast
#Dagger #IDEA

Introducing Scabbard: Easily visualize Dagger 2 dependency graphs

Это случилось - плагин для визуализации графа зависимостей Dagger 2. И называется это счастье - Scabbard. Он позволяет увидеть Component, Subcomponent, зависимости, их Scope и отношения между ними.

Проект еще в разработке и находится в версии 0.1.0
👉 Gihub проекта
👉 Инструкция по настройке
источник
Android Broadcast
Пример визуализации графа из Android Studio
источник
2019 December 31
Android Broadcast
#AndroidOS

System App In Android

Все приложения делятся на 2 категории: системные и сторонние. Большинству разработчиков приходится сталкиваться со второй категорией приложений и распространять их через магазины приложений.

Но что могут делать системные приложения? Почему нам не дают их заменить? Почему разработчики стороннего лаунчера или звонилки не могут получить все возможности предустановленного приложения?

В статье разбираются особенности системных приложений и их возможности, которые не даны простым сторонним приложениям.
источник
2020 January 01
Android Broadcast
#Splash #Coroutines

A Guide on Splash Screen in Android in 2020

Экран-заставка (Splash Screen) довольно часто явление в мобильных приложениях. Цели его разные:
👉 Красивое интро в приложение
👉 Начальная Activity приложения определяется динамически
👉 Быстры рендеринг просто экрана, пока идет инициализация приложения (холодный старт)
👉 Комбинация описанных выше пунктов 😁

В статье рассматриваются рекомендации по созданию Splash Screen:
👉 Использование android:windowBackground для задания фона экрана
👉 Как правильно отсчитывать время до закрытия Splash Screen: Handler / Timer / Coroutines
источник
Android Broadcast
Есть ли Splash Screen в ваших приложениях?
Анонимный опрос
84%
Да
16%
Нет
Проголосовало: 421
источник
Android Broadcast
#Новости

Вот и наступил новый год. Для меня 2019-й год прошёл очень бодро и с множеством событий как в работе, так и моей активности за её рамками. Одно из самых неожиданных стало для меня, что канал «Android Broadcast» прижился и я слышу положительные отзывы, а также идеи того, что сделать лучше от вас (статистику можно посмотреть выше 📈 ⬆️)

Я желаю вам в новом году активного роста высших навыков 💪, покорения новых вершин 🔝, и всего самого наилучшего вам и вашим семьям.

С большим уважением, автор канала Кирилл Розов
источник
Android Broadcast
#OkHttp #Networking

Вышел OkHttp 4.3.0

Пока вчера все готовились к празднованию нового года ребята из OkHttp решили сделать новый релиз. Список изменений небольшой и имеет только одну новое важное изменение:
👉  Более агрессивное переиспользование потоков между OkHttp's HTTP/2 соединениями, connection pool, web socket-ами, и кэшем
👉  Обновление до Kotlin 1.3.61
👉  Исправление багов
источник
2020 January 02
Android Broadcast
#MemoryLeak #LeakCanary

Вышел LeakCanary 2.1.0

Популярная утилита для поиска утечек памяти развивается дальше. После недавне представленной версии 2.0 уже выходит следующее минорное обновление, в которое попали новые функции:
👉 Gradle плагин для обфусцированных приложений. Раньше была проблема, что при тестировании обфусцированной сборки приложения (с R8 или ProGuard) все стектрейсы было бесполезно смотреть с устройства так, как все названия классов/методов были изменены. Встречайте LeakCanary gradle плагин для обфусцированных приложений, которые решает это
👉 Множество улучшений в UI приложения для просмотра утечек памяти на устройства
👉 Улучшение документации
👉 Улучшение в API Leak и LeakTrace
👉 Автоматическое отключение LeakCanary, если в classpath найден заданный класс. По умолчанию этим классом является org.junit.Test
👉 Возможность изменения способа с помощью которого LeakCanary ищет утечки памяти в heap dump
👉 Интерактивный режим работы CLI
источник
Android Broadcast
#LeakCanary #Reporting #Bugsnag

LeakCanary: Uploading to Bugsnag

Авторы LeakCanary рассказали о том, как они отслеживают утечки памяти в проде и уже не пропускают ни одной из таких проблем 3 года. Делают это они с помощью выгрузки leak trace на Bugsnag. Как это реализовать вы можете найти по ссылке.

Пример как будет выглядеть отчёт в Bug Snag можно найти в посту ниже ⬇️⬇️⬇️
источник
Android Broadcast
Пример как выглядет leak trace из LeakCanary в Bugsnag
источник
Android Broadcast
источник
2020 January 03
Android Broadcast
#Activity #Architecture

ActivityLifecycleCallbacks — слепое пятно в публичном API

ActivityLifecycleCallbacks - это полезное API, которое позволит вам избавиться от супер класса для всех Activity, в котором вы выполняете общие действия, или элегантно решить архитектурную задачу или сделать много чего еще полезного, о чем автор рассказывает в статье:
👉 Изменять темы для всех Activity
👉 Отловить onActivityResult()
👉 Отслеживать запускаемый экраны для аналитики
👉 Улучшить inject зависимостей через Dagger Android

Если вам нужно отслеживать через callback жизненный цикл Fragment, то вы можете использовать FragmentLifecycleCallbacks.
источник
Android Broadcast
#Coroutines #Channel

Kotlin Coroutines in Android — Channel

Разбор Channel для предоставления набора значений (горячего):
👉 Что такое Channel и с чем он схож
👉 offer() vs send()
👉 poll() vs receive()
👉 Закрытие Channel
👉 close() vs cancel()
👉 Типы Channel: Rendezvous, Buffered, Unlimited, Conflated
источник
Android Broadcast
#Video #FFmpeg

Video Trimmer

Полезная библиотека, которая позволит вам вырезать кусов видео или вырезать кадры. Под капотом используется FFmpeg
источник
2020 January 04
Android Broadcast
#UI #Performance

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 отложено.
источник
Android Broadcast
#Dagger #ViewModel #SavedState #AssistedInject

Connecting The Dots

Описать как сделать что-то на Dagger может быть долго и непонятно, поэтому отправлю вас сразу в статью в которой описывается руководство как реализовать связку ViewModel + SavedStateHandle + Dagger 2.

Почему это важно изучить? ViewModel не сохраняет своё состояние при пересоздании процесса, а только при изменении конфигурации, поэтому нужно использовать SavedStateHandle

Подробнее о сохранении состояния ViewModel ➡️ здесь
источник
2020 January 06
Android Broadcast
#Podcast #Ask #Coroutines #UnderTheHood

8 января я, Кирилл Розов, автор канала Android Broadcast и Ильмир Усманов, разработчик компилятора Kotlin в JetBrains запишем подкаст на тему того, как обеспечивается работа Coroutine на уровне компилятора:
👉 Как работают Сoroutine под капотом
👉 Оптимизация кода компилятором
👉 Нужно ли разработчику запариваться как вызывать suspend функции определенным образом для более оптимального байт кода
👉 Как эффективнее вызывать suspend функции
👉 Coroutines в JVM/Native/JS
👉 Какие оптимизации ждут Coroutine в новом JVM Backend
👉 Дебаг Coroutine

Свои вопросы, на которые вам интересно услышать ответы, вы можете задать в Twitter комментарием на пост или мне в личку
источник
Android Broadcast
#Debug

Developer Options in Android

Как можно оценить производительность вашего приложения? Стандартный способ - подключить кабелем телефон к вашему компьютеру и запустить Android Studio. Потом вы можете с помощью встроенных средств IDE выполнить проверки.

Но вышеописанный способ не является единственным. Можно воспользоваться инструментов из "Developer Options" прямо на устройстве. Там вы сможете найти:
👉 Layout Inspector - отрисовка границ View на экране
👉 Simulate Display Cutout - симуляция выреза в дисплее
👉 Изменение Minimum Width (dp)
👉 Don’t Keep Activities - уничтожение Activity когда они пропадают с экрана
👉 Profile GPU Rendering - проверка успевает ли ваш UI отрисоваться и не допустить просадки 60 FPS
👉 Strict Mode
👉 Animator duration scale/Transition animation scale - настройка воспроизведения анимации
👉 Night Mode - принудительное включение темной темы

и много много других, о которы вы можете найти все подробности в статье
источник