Привет. Меня зовут Кирилл Розов и вы если вы интересуетесь разработкой по Android, то скорее всего слышали о Telegram канале "Android Broadcast", с ежедневными новостями для Android разработчиков, и одноимённом YouTube канале. Этот пост является текстовой расшифровкой нового видео на канале
Привет! Очередная неделя подошла к концу, и я собрал лучшие новости специально для вас! Вышла большая порция новых стабильных библиотек Android Jetpack, IDEA теперь может запускаться на CI, а в конце вы узнаете как выиграть билет на Mobius! Я Кирилл Розов, это канал Android Broadcast. Давайте разбираться!
AndroidX Activity 1.2.0 | Activity Result API
Вышла библиотека Activity 1.2.0 в которой появилось Activity Result API, возможность получить
Context
до вызоваonCreate()
, поддержкаViewTree
, а также backport методаreportFullyDrawn()
.
Activity Result API - это новое API, которое приходит на замену перегрузке метода onActivityResult() и делает его более удобным. Теперь вам нужно просто зарегистрироваться с указанием контракта и callback для получения объекта ActivityResultContract, который вы можете вызвать для получения результата из любой Activity. Самые распространенные контракты такие как получение картинки или выбор файла уже реализованы в библиотеки, но вы легко можете добавить свой. Также важный аспект нового API то, что оно упрощает работу с получением разрешений, так как их механизм основан на onActivityResult()
.
Следующая новинка - возможность получить Context
до вызова onCreate()
, подписавшись на соответствующее событие. Конечно есть вариант для Coroutine без callback-a.
Поддержка ViewTree
- это значит что ComponentActivity
теперь работает со всеми новыми API из SavedState и Lifecycle, о которых я расскажу позже.
Fragment 1.3.0
Вышла новая библиотека Fragment 1.3.0 в которой произошел большой рефакторинг под капотом, добавлена интеграция с новыми API, пометили как deprecated множество API, а также представили новый механизм для коммуникации между
Fragment
.
Самое важное, что произошло в новой версии - это новый менеджер состояния Fragment-ов, который исправил множество странностей в поведении, а также заложил фундамент для поддержки множества back stack-ов.
Интеграция Activity Result API позволила упростить код внутри, а также исправила несколько проблем, связанных с request кодами и вызовами callback-ов о получение permission.
Если вы пробовали когда передавать результат между Fragment с помощью setTargetFragment - это была еще та задача. Не место ему добавили новое API - Fragment Result API, которое позволяет через FragmentManager обмениваться данными между Fragment-ами через специальные Callback.
"Пора Fragment меняться и становиться проще" - видно так решили в Google и стали помечать deprecated множество API. setRetainInstance() уходит, передавая свои полномочия ViewModel. FragmentPagerAdapter из ViewPager 1 теперь тоже deprecated и как замена предлагается использовать вторую версию библиотеки, которую разработчики ругают и зачастую все также пользуются первой. Но самый интересный deprecation произошел с методом onAttachFragment() в Activity и Fragment. Ему на смену приходит FragmentOnAttachListener, который более гибкий и позволяет делегировать вызов onAttachFragment().
Lifecycle 2.3.0
Вышла новая версия Lifecycle 2.3.0 добавила возможность сохранять новые типы в SavedStateHandle, изменилось поведение Lifecycle, а также добавили новое ViewTree API.
В SavedStateHandle появилась lazy сериализация, т.е. теперь можно задать setSavedStateProvider() для заданного ключа, чтобы сериализовать его лениво, что позволяет сохранять любой тип.
Изменения также затронули Lifecycle: теперь DESTROYED - это терминальное состояние, и после него никаких вызовов происходить не будет. Также теперь все методы Lifecycle вызываются строго на главном потоке, а в противном случаем будет креш. Помимо прочего добавили нового API, чтобы упростить тестирование
Большая новинка ViewTree API, которое позволяет получить LifecycleOwner или ViewModelStoreOwner для заданного View. Аналогичное API добавили для SavedStateRegistry в библиотеки savedstate 1.1.0
Kotlin Symbol Processing вышел в Альфу
Kotlin Symbol Processing (KSP) перешёл в альфу и начата работа по его адаптации в Room
Новость хорошая так как цель KSP - заменить kapt, который здорово тормозит сборку проектов и не всегда позволяет генерировать код инкрементально. Новое решение от Google будет сразу генерировать Kotlin код без магии, которая необходима, чтобы завести Java apt в Kotlin. По предварительным данным скорость работы KSP в 2 раза быстрее kapt. Похоже свет в конце туннеля есть. Будем ждать адаптации KSP в библиотеках
Запуск анализа кода IDEA на CI
Статически анализ кода из IDEA теперь можно будет запустить без GUI на CI
Новый проект JetBrains - Qodana, который позволяет запустить статически проверки кода на вашем CI и генерировать отчеты. Qodana состоит из 2 частей: IDEA без UI для запуска проверок и утилита для создания Web UI с отчетом. Теперь анализ можно добавить в ваш pipeline. Сейчас поддерживается интеграция в Teamcity, через Docker образ и есть GitHub Action и Application. Вы также можете посмотреть на анализ открытых проект на публичном TeamCity. В будущем количество поддерживаемых языков и способов интеграции будет увеличиваться. На стадии EAP проект бесплатен, но что будет с выходом первого релиза непонятно.
Посмотреть работу Qodana (входить как гость)
Core App Quality
На сайте developers.android.com появился новый раздел "App Quality", содержащий ключевые аспекты качественного Android приложения.
В новом разделе вы сможете найти каким критериям должно соответствовать хорошее приложение, а главное как это добиться. Помимо прочего вы найдете checklist в котором представлены все тренды экосистемы Android. Сейчас представлены пять категорий:
визуальный опыт
функциональность
производительность и стабильность
приватность и безопасность
Соответствие политикам Google Play
Также вы найдете рекомендации по организации тестирования для проверки этих требований в своих приложениях.
Модуляризация 2021
Вышла серия статей от разработчиков Kaspersky в которой они рассказывают о своём опыте современной модуляризации android приложения и инициализации feature модулей сразу, так и отложенно, когда feature понадобится пользователю. Всем кто задумывался над модуляризацией или хочет ее оптимизировать обязательно к прочтению.
Условия розыгрыша билета на Mobius
Подписаться на YouTube канал "Android Broadcast"
Подписаться на Telegram канал "Android Broadcast"
Подписаться на Telegram канал "Kotlin Broadcast"
Оставить комментарий под роликом с указанием своего никнейма в Telegram (не номер телефона!!!)
Ждать розыгрыша, который пройдет в марте