#ArchitectureComponents #LiveData #ViewModel



Architecture Component (AC) довольно популярны в современной Android разработки, компоненты внутри #AndroidX переходят на использование их под капотом, SDK устаревают и рекомендуют переходить на AC. Но важно помнить один принцип: "С большой силой приходит большая отвественность", поэтому любая библиотека или паттерн должны использоваться правильно, чтобы приносить пользу.



Наиболее распространненые ошибки при работе с AC



1. Учечка LiveData observer в Fragment-ах

Все LiveData в Fragment которые обновляют UI, должны быть подписаны на изменения между onCreateView() и onDesctoyView(). Проблема в том, что стандартный LifecycleOwner Fragment-а отписывается после onDestroyView(). Решение этого является использование Fragment.viewLifecycleOwner, который доступен в AndroidX либо Android Support Library 28.0.0. На старых версихя Android придется отписываться руками в onDestroyView() 😢



2. Перезагрузка данных на каждом повороте/смене конфигурации

Тут рекомендую посмотреть код из статьи, там описан подробно пример того как это делается.



3. Утечка ViewModel-ей

Хранение ссылки на ViewModel не должно происходить где-либо кроме Fragment/Activity



4. Предоставление доступа к LiveData как изменяемой (MutableLiveData) to views

LiveData лежат в ViewModel и не должны быть публично модифицируемыми.



5. Создание зависимостей ViewModel-ей после каждого изменения конфигурации

Все зависимости, которые вы собирайтесь Inject-ить в ViewModel, в ViewModelProvider.Factory должны быть объвляне через Provider, который позволит корректно работать со Scope зависимостей.



class MoviesViewModelFactory(

val repository: Provider<MoviesRepository>,

val stringProvider: Provider<StringProvider>,

) : ViewModelProvider.Factory



Выбрал я эти советы из статьи

"5 common mistakes when using Architecture Components"