Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.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
Java 使用Android Room不使用allowmainthreadqueries()的最佳方法是什么?_Java_Android_Kotlin_Android Room - Fatal编程技术网

Java 使用Android Room不使用allowmainthreadqueries()的最佳方法是什么?

Java 使用Android Room不使用allowmainthreadqueries()的最佳方法是什么?,java,android,kotlin,android-room,Java,Android,Kotlin,Android Room,我总是在Android Room中使用allowmainthreadqueries()。但许多人说,不建议这样做。 有了这个功能,房间很容易使用。 但是,如果我要将我的应用程序更改为不使用此功能,我该怎么做? 有有效的方法吗?是的,在主线程上查询数据库不是一个好方法。有不同的方法可以使DB操作远离主(UI)线程,主要是 科特林合作项目 RxJava(RxAndroid) 实时数据 遗嘱执行人 AsycTask 在上述情况下,最好的选择总是取决于您的用例是什么。 但前三个是最好的选择。因为它们提供

我总是在Android Room中使用
allowmainthreadqueries()
。但许多人说,不建议这样做。 有了这个功能,房间很容易使用。 但是,如果我要将我的应用程序更改为不使用此功能,我该怎么做?
有有效的方法吗?

是的,在主线程上查询数据库不是一个好方法。有不同的方法可以使DB操作远离主(UI)线程,主要是

  • 科特林合作项目
  • RxJava(RxAndroid)
  • 实时数据
  • 遗嘱执行人
  • AsycTask
  • 在上述情况下,最好的选择总是取决于您的用例是什么。
    但前三个是最好的选择。因为它们提供对查询结果的回调。

    主线程负责处理用户界面事件。如果对其执行长时间运行的操作,可能会使UI失去响应。在什么情况下需要在主UI线程上运行db查询?也许Livedata是最佳选择。谢谢。正如我已经提到的,这取决于您的情况,当您想更新视图时,Flow(协同路由)和Flowable(RxJava)是最好的选择。当一些数据插入数据库时,您不必每次插入数据都进行查询,Flow/Flowable将始终为您提供最新的更新。