Android Broadcast
14.2K subscribers
3.53K photos
347 videos
11 files
5.92K links
Подборка новостей и статей для Android разработчиков.

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

РКН https://abdev.by/rkn_tg_ab
加入频道
#Jetpack #Activity #ViewModel

Activity 1.1.0

Важным изменением в новой версии Activity стала изменение используемой по умолчанию фабрики для создания ViewModel. Раньше использовалась AndroidViewModelFactory на смену которой пришла SavedStateViewModelFactory.

Теперь вы можете получить SavedStateHandle в конструкторе ViewModel, например

class MyActivity : Activity() {
val vm: MyViewModel by viewModels()
}

class MyViewModel(
savedState: SavedStateHandle
) : ViewModel()
#Fragment #ViewModel #Jetpack

Fragment 1.2.0

👉 FragmentContainerView - новая ViewGroup, предназначенная специально для размещения в ней Fragment. Она исправляет проблемы с анимациями при выполнение транзакций. Забудь о FrameLayout или <fragment>, теперь только FragmentContainerView.
👉 Изменение используемой по умолчанию фабрики для создания ViewModel по аналогии с Activity 1.1.0
👉 Fragment.onDestroyView() теперь вызывается только после окончания анимации/transition
👉 Новые проверки Android Lint: теперь проверяется правильность использования getViewLifecycleOwner()
👉 Fragment.getFragmentManager() переименовано в Fragment.getParentFragmentManager()
👉 FragmentManager теперь поддерживает операции (add/replace и др.) с Fragment по их классу, в дополнение к заранее созданному объекту. Это улучшает поддержку возможности по интеграции DI в конструктор Fragment.
#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.
#ViewModel #ArchitectureComponent #UnderTheHood

Android ViewModel. How it works

Android Architecture Components - довольно популярное решение на сегодня в Android разработке. Понимание механизмов работы его компонентов поможет эффективнее использовать его и подать идеи как реализовать другой функционал с использованием аналогичных механизмов.

В статье разбирается:
👉 ViewModelProvider
👉 ViewModelStore
👉 ViewModelStoreOwner
👉 Эволюция ViewModel: 2017, 2018, 2019
👉 Где хранится ViewModel чтобы переживать пересоздания Activity/Fragment при смене конфигурации
#DependencyInjection #ArchitectureComponents #ViewModel

Injecting ViewModel — hard to easy

В современной Android разработке очень популярна архитектура MVVM на основе Arch Components. И куда же современное приложение без Dependency Injection (DI).

Создание ViewModel и доставка зависимостей в ее конструктор с помощью DI - нетривиальная задача, так как создать ViewModel просто через конструктор неправильно, нужно делать это через ViewModelProvider.Factory.

В статье разбирается как решить эту задачу с помощью Dagger и Koin.
#ArchitectureComponents #ViewModel

Should I use Jetpack ViewModel?

Архитектура MVVM на основе Jetpack на сегодня довольно популярна в Android разработке. Вы задумывались так ли много проблем решает ViewModel из Jetpack?

Автор в своей статье приводит доводы, которые заставят вас задуматься так ли все просто и помогут найти проблемы
#Hilt #ViewModel

Using Hilt’s ViewModelComponent

В Dagger 2.31 появился ViewModelComponent и соответствующий Scope. Для того чтобы переиспользовать сущности за пределами жизни Activity у нас существует теперь 2 scope: @ViewModelScoped и @ActivityRetainedScoped
#Compose #ViewModel #Flow

Better handling states between ViewModel and Composable

В статье рассказывается как лучше соединить изменение состояния из ViewModel в Compose на основе Coroutines Flow
#ViewModel #Dagger

Способы инжектить ViewModel с помощью Dagger: что может пойти не так

Рецепт как соединить DI через Dagger с Arch Components, чтобы делать inject ViewModel и зависимостей в них
#compose #viewmodel #navigation

Jetpack Compose navigation architecture with ViewModels

Вариант организации навигации с Jetpack Compose, который предлагает Google и как туда вписать ViewModel