Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Room DAO-对于生命周期感知和非感知的观察者,我们是否应该使用LiveData_Android_Rx Java_Android Room_Android Jetpack_Kotlin Coroutines - Fatal编程技术网

Android Room DAO-对于生命周期感知和非感知的观察者,我们是否应该使用LiveData

Android Room DAO-对于生命周期感知和非感知的观察者,我们是否应该使用LiveData,android,rx-java,android-room,android-jetpack,kotlin-coroutines,Android,Rx Java,Android Room,Android Jetpack,Kotlin Coroutines,在以下情况下,我们是否应该使用LiveData作为DAO接口中查询函数的返回结果: 我们希望在ViewModel(生命周期感知)中使用此功能 我们希望在DB初始值设定项中使用此函数(无生命周期意识) 我们希望在某种后台处理回调中使用它(无生命周期意识) 这里的最佳实践是什么?我们应该使用协同程序并转换为LiveData吗?我们应该使用rx吗?或者只创建两个具有不同返回结果类型的函数?LiveData应仅用于生命周期,并仅用于更新ui。LiveData观察程序始终在主线程中调用。如果要执行其他

在以下情况下,我们是否应该使用LiveData作为DAO接口中查询函数的返回结果:

  • 我们希望在ViewModel(生命周期感知)中使用此功能
  • 我们希望在DB初始值设定项中使用此函数(无生命周期意识)
  • 我们希望在某种后台处理回调中使用它(无生命周期意识)

这里的最佳实践是什么?我们应该使用协同程序并转换为LiveData吗?我们应该使用rx吗?或者只创建两个具有不同返回结果类型的函数?

LiveData应仅用于生命周期,并仅用于更新ui。LiveData观察程序始终在主线程中调用。如果要执行其他代码,应该使用流作为查询函数的返回类型。使用Flow,您可以指定执行代码的协同路由调度程序,并使用以下函数将其转换为LiveData:

liveData(Dispatchers.IO) {
    myFlow.collect {
        emit(it)
    }
}
您还可以创建两种不同的方法