Android Комната DAO - должны ли мы использовать LiveData в случае наблюдателей, осведомленных о жизненном цикле / не осведомленных - PullRequest
1 голос
/ 10 января 2020

Если мы используем LiveData в качестве результата возврата из функции Query в интерфейсе DAO, когда:

  • мы хотим использовать эту функцию в ViewModel (с учетом жизненного цикла)
  • , которую мы хотим используйте эту функцию в инициализаторе БД (без учета жизненного цикла)
  • мы хотим использовать ее в некоторых видах фоновых обратных вызовов (без учета жизненного цикла)

Что является лучшим методом Вот? Должны ли мы использовать сопрограммы и конвертировать в LiveData? Должны ли мы использовать RX? Или, может быть, просто создать 2 функции с различным типом результата возврата?

1 Ответ

1 голос
/ 11 января 2020

LiveData следует использовать только с жизненным циклом и только для обновления пользовательского интерфейса. Обозреватель LiveData всегда вызывается в основном потоке. Если вы хотите выполнить другой код, вы должны использовать Flow в качестве возвращаемого типа функции Query. С помощью Flow вы можете указать диспетчер сопрограмм, который выполняет код, и вы можете преобразовать его в LiveData с помощью этой функции:

liveData(Dispatchers.IO) {
    myFlow.collect {
        emit(it)
    }
}

Также вы можете создать два разных метода.

...