Почему я должен использовать живые данные вместо Observable? - PullRequest
0 голосов
/ 21 декабря 2018

Я много искал на форумах и в стеке, но не смог найти удовлетворительного ответа.Хотя наблюдаемые поля прекрасно работают с привязкой данных в моих моделях представлений, почему я должен вместо этого использовать объект Live Data?

Я знаю, что Live Data поддерживает жизненный цикл и обновляет только пользовательский интерфейс в активном состоянии действия / фрагмента,но действительно ли намного лучше использовать живые данные вместо наблюдаемых полей?Потому что я работаю над проектом финансового приложения, и он на самом деле мало работает с пользовательским интерфейсом с наблюдаемыми, но обновляет пользовательский интерфейс только всякий раз, когда получает ответ сервера, требующий взаимодействия с пользователем.

Также, когда действие выполняетсяуничтожены, модель представления фрагмента и его данные все еще остаются в памяти?Если нет - а я полагаю, нет - в чем преимущество живых данных над наблюдаемыми утечками памяти?

1 Ответ

0 голосов
/ 21 декабря 2018

почему я должен вместо этого использовать объект Live Data?

Вам не нужно использовать LiveData.Это вариант, не более того.

Я знаю, что Live Data поддерживает жизненный цикл и обновляет пользовательский интерфейс только в активном состоянии действия / фрагмента, но действительно ли лучше использовать Live Data вместоНаблюдаемые поля?

Вам придется как-то иметь дело с жизненным циклом.Если вы предпочитаете вручную распоряжаться своими Rx-подписками или если вы хотите использовать для этого библиотеку, вы можете это сделать.Некоторые предпочитают упаковывать свои типы Rx в LiveData, используя LiveDataReactiveStreams или аналогичные механизмы, поэтому они будут очищаться автоматически в зависимости от жизненного цикла действия / фрагмента.

Кроме того, не все используют RxJava.RxJava имеет существенную кривую обучения, и некоторые разработчики предпочли бы ее пропустить.Для них может быть полезно просто использовать LiveData.

Также, когда действие уничтожается, модель представления фрагмента и его данные все еще остаются в памяти?

Это зависит от вашей реализации.

Например, предположим, что под «моделью представления фрагмента» вы подразумеваете, что используете систему Jetpack ViewModel.В этом случае:

  • Если действие уничтожается как часть изменения конфигурации, все объекты ViewModel, относящиеся к этому действию, и его фрагменты будут сохраняться при изменении конфигурации

  • Если действие уничтожается из-за того, что оно действительно завершено, все объекты ViewModel, находящиеся в области действия этого действия, и его фрагменты будут собираться мусором, когда само действие будет собираться мусором

В чем преимущество живых данных над наблюдаемыми утечками памяти?

Опять же, в какой-то момент вам необходимо dispose() ваши объекты RxJava Disposable,Делаете ли вы это самостоятельно, пользуетесь ли вы библиотекой или полагаетесь на LiveData обертки, решать только вам.

...