Android Broadcast
14.4K subscribers
3.68K photos
367 videos
11 files
6.1K links
Подборка новостей и статей для Android разработчиков.

Реклама и связь с автором @ab_manager

РКН https://abdev.by/rkn_tg_ab #MQRZR
Download Telegram
#Lifecycle #ViewModel #Activity

The Android Lifecycle cheat sheet — part IV : ViewModels, Translucent Activities and Launch Modes

Четвертая часть в серии диаграмм жизненного цикла основных компонентов Android. В последней статье вы найдете информацию о жизненном цикле:
👉 ViewModel в Activity и Fragment
👉 Translucent Activity
👉 Activity в различных launch режимах: "single top" и "single task"
#RxJava #Lifecycle #Uber

RxJava2 AutoDispose by Uber was opened

Uber открыла доступ к своей библиотеке AutoDispose. Она позволяете автоматически вызывать dispose() вашим Observable

ПОд капотом все выполняется с помощью метода-фабрики autoDisposable() следующим образом:

myObservable
.doStuff()
.as(autoDisposable(this)) // The magic
.subscribe(s -> ...);

Поддерживается основные компоненты Android с жизненным циклом, Architecture Components, RxLifecycle, есть расширения для Kotlin и тестов
#AndroidX #ArchComponents #Lifecycle

Detecting when an Android app is in foreground or background

Как вы определяете что приложение ушло в фон или пользователь закрыл все Activity в приложение? В Android Architecture Components есть прекрасное решение для этого - ProcessLifecycleOwner.
👍1
#ArchitectureComponent #ViewModel #Lifecycle #Coroutines

Lifecycle 2.2.0

Много новых интеграций с Kotlin Coroutines:
👉 Конвертация Flow <-> LiveData
👉 liveData { } - генератор значений с помощью Coroutine, которые доставляются через LiveData
👉 LifecycleCoroutineScope - специальный CoroutineScope, связанный с Lifecycle. Он позволяет запускать Coroutine, когда Lifecycle достигнет определенного состояния с помощью launchWhenCreated, launchWhenResumed и launchWhenStarted
👉 suspend функции, связанные с LifecycleOwner и Lifecycle, которые позволяют дождаться заданного состояния Lifecycle: whenCreated, whenStarted, whenResumed, whenStateAtLeast (только для Lifecycle)


Но помимо этого
👉 Теперь вместо ViewModelProviders.of() надо создавать ViewModelProvider через конструктор
👉 Gradle Incremental Annotation Processor: Теперь вместо аннотирования методов, который должны вызываться на методы жизненного цикла, с помощью @OnLifecycleEvent используйте DefautLifecycleObserver.
#Jetpack #ArchitectureComponents #Lifecycle

Optimizing Android ViewModel with Lifecycle 2.2.0

Обзор последних возможностей библиотек Lifecycle (LiveData, ViewMode, Lifecycle), ktx расширений и лучших практик:
👉 Делегаты ViewModel
👉 Почему не стоит использовать AndroidViewModel
👉 Какие данные не стоит передавать в ViewModel
👉 Сохранение данных ViewModel
#Lifecycle

Lifecycle 2.3.0-alpha06

Изменение поведения
👉 DESTROYED теперь терминальное состояние, что означает отсутствие каких-либо дальнейших событий
👉 LifecycleRegistry теперь будет проверять, что метод вызываются на главном потоке

👉 Новые вспомогательные методы downFrom(State)downTo(State)upFrom(State)upTo(State), которые генерирует Event для заданного State и направление перехода для его осуществления.
👉 Новый метод Lifecycle.withStateAtLeast, который дожидается когда Lifecycle, достигнет заданного состояния
#Lifecycle

Kotlin lifecycle delegates

Библиотека поможет вам соединить жизненный цикл и действия, которые надо выполнить. Например, инициализацию объектов. Все это делается через Delegated Property
#Coroutines #Lifecycle

Deep Dive Into Android Lifecycle Coroutines

Разбор как работают CoroutineScope, которые являются частью библиотеки lifecycle-ktx, и какие особенности есть в их поведении.
#Coroutines #Lifecycle

repeatOnLifecycle API design story

В Lifecycle 2.4.0 (пока в альфа) нас ждут новые возможности вызова Lifecycle.repeatOnLifecycle. В статье разбираются подробности реализации, а именно:
👉 Почему Lifecycle.repeatOnLifecycle - это suspend функция
👉 Почему удалили LifecycleOwner.addRepeatingJob (спойлер - нарушение принципов Structured Concurrency)
👉 Что там с Flow.flowWithLifecycle
👉 Какие изменения API ещё будут
Обновления библиотек Jetpack Lifecycle 2.8.0

Lifecycle
👉 LocalLifecycleOwner из Compose переехал в lifecycle-runtime-compose
👉 Новые Composable API dropUnlessResumed и dropUnlessStarted что позволяет лямбду вызывать только когда LifecycleOwner достигнет состояния Resumed/Started соотвественно и не будет вызывать когда выйдет из него. Например, полезно для навигации
👉 LifecycleStartEffect и LifecycleResumeEffect бросают ошибку если не задать key. По аналоги с DisposableEffect
👉 API Lifecycle, LifecycleOwner, LifecycleObserver, Lifecycle.State, Lifecycle.Event и LifecycleRegistry теперь являются частью мультиплатформенных модулей

ViewModel
👉 ViewModel теперь позволяет передать произвольный CoroutineScope при создании. Полезно для тестов и не только
👉 ViewModel переписали на Kotlin и перешли с Closable на AutoClosable из Kotlin
👉 API ViewModel, ViewModelStore, ViewModelStoreOwner и ViewModelProvider теперь являются частью мультиплатформенных модулей
👉 ViewModelProvider.NewInstanceFactory и ViewModelProvider.AndroidViewModelFactory доступны только на Android
👉 Для всех таргетов не Android должна быть обязательна указана фабрика для ViewModel

LiveData
👉 Переписали NullSafeMutableLiveData

#lifecycle #viewmodel #compose #kmp
14👍10
Есть полезная Jetpack библиотека lifecycle-process, которая предоставляет Lifecycle, связанные с процессом вашего приложения (Application класс).

В статье(EN,7м) рассказывается как делают её интеграцию с корутинами и применяют в проекте

#jetpack #coroutines #lifecycle
👎116👍5
🚀 Lifecycle 2.10.0 вышел в стабильной версии!

Google выпустила мажорное обновление библиотек Lifecycle. Этот релиз сфокусирован на улучшении интеграции с Compose.

⚙️ rememberLifecycleOwner для Compose
Новый композабл позволяет создавать изолированные LifecycleOwner внутри UI. Идеально для компонентов, которым нужно независимое управление состоянием — например, для HorizontalPager, где только активная страница должна быть в состоянии RESUMED.

@Composable
fun MyComposable() {
val lifecycleOwner = rememberLifecycleOwner(
maxLifecycle = Lifecycle.State.RESUMED,
parentLifecycleOwner = LocalLifecycleOwner.current,
)

CompositionLocalProvider(
LocalLifecycleOwner provides lifecycleOwner
) {
// Дочерние композаблы теперь имеют собственный жизненный цикл
}
}


🚀 Интеграция с Navigation 3
Новый артефакт lifecycle-viewmodel-navigation3 предоставляет готовый декоратор для автоматической привязки ViewModel к отдельным экранам в Navigation 3.

NavDisplay(
backStack = backStack,
entryDecorators = listOf(
rememberSaveableStateHolderNavEntryDecorator(),
rememberViewModelStoreNavEntryDecorator(), // Добавляем эту строку
),
entryProvider = entryProvider { /* ... */ }
)


Удобства для разработчиков:
👉 Идиоматичный Kotlin API для создания кастомных CreationExtras

    CreationExtras {
this[MY_CUSTOM_KEY] = "myValue"
}

👉 Метод savedStateHandle.saved() теперь нативно поддерживает nullable типы
👉 Конструкторы SavedStateHandle помечены как @VisibleForTesting

⚠️ Важное изменение
Повышение minSdk с API 21 до API 23 — убедитесь, что ваше приложение соответствует новым требованиям.

#Jetpack #Lifecycle #Compose #Navigation #ViewModel #Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
16🔥10🤯3👍2🙏1