почему я должен вместо этого использовать объект Live Data?
Вам не нужно использовать LiveData
.Это вариант, не более того.
Я знаю, что Live Data поддерживает жизненный цикл и обновляет пользовательский интерфейс только в активном состоянии действия / фрагмента, но действительно ли лучше использовать Live Data вместоНаблюдаемые поля?
Вам придется как-то иметь дело с жизненным циклом.Если вы предпочитаете вручную распоряжаться своими Rx-подписками или если вы хотите использовать для этого библиотеку, вы можете это сделать.Некоторые предпочитают упаковывать свои типы Rx в LiveData
, используя LiveDataReactiveStreams
или аналогичные механизмы, поэтому они будут очищаться автоматически в зависимости от жизненного цикла действия / фрагмента.
Кроме того, не все используют RxJava.RxJava имеет существенную кривую обучения, и некоторые разработчики предпочли бы ее пропустить.Для них может быть полезно просто использовать LiveData
.
Также, когда действие уничтожается, модель представления фрагмента и его данные все еще остаются в памяти?
Это зависит от вашей реализации.
Например, предположим, что под «моделью представления фрагмента» вы подразумеваете, что используете систему Jetpack ViewModel
.В этом случае:
Если действие уничтожается как часть изменения конфигурации, все объекты ViewModel
, относящиеся к этому действию, и его фрагменты будут сохраняться при изменении конфигурации
Если действие уничтожается из-за того, что оно действительно завершено, все объекты ViewModel
, находящиеся в области действия этого действия, и его фрагменты будут собираться мусором, когда само действие будет собираться мусором
В чем преимущество живых данных над наблюдаемыми утечками памяти?
Опять же, в какой-то момент вам необходимо dispose()
ваши объекты RxJava Disposable
,Делаете ли вы это самостоятельно, пользуетесь ли вы библиотекой или полагаетесь на LiveData
обертки, решать только вам.