所以我知道Room不处理线程,因此要由开发人员来确保它不会在主线程上运行查询。
在AsyncTasks中包装所有查询似乎非常麻烦,但是我意识到我可以改用LiveData。但是,我假设这仅适用于数据查询,而不适用于插入和删除查询?因此,我还是应该将它们包装在AsyncTask中(不求助于其他第三方库吗?)还是有更好的选择?
答案 0 :(得分:4)
所以我知道Room不处理线程,因此要由开发人员来确保它不会在主线程上运行查询。
如果您在Kotlin中使用suspend
或DAO函数的反应式返回类型,则房间将处理线程:
Flow
(需要2.2.0或更高房间)LiveData
Observable
,Single
,Completable
)如果您选择不使用这些东西,那么可以,线程取决于您。
在AsyncTasks中包装所有查询似乎非常麻烦,但是我意识到我可以改用LiveData。但是,我假设这仅适用于数据查询,而不适用于插入和删除查询?
如果您是指使用@Query
或INSERT
而不是DELETE
的{{1}}方法,那么是的,我认为您是正确的。但是,由于SELECT
函数可以返回@Insert
,因此您可能能够使用Long
的{{1}}返回@Query
。我没有尝试过,我怀疑Room编译器不会识别这种方法,但是总有希望。 :-)
所以我还是应该将它们包装在AsyncTask中(不求助于其他第三方库吗?)还是有更好的选择?
我们欢迎您使用普通的INSERT
或LiveData<Long>
,Thread
或其他任何可为您提供后台线程的Android设备。 Executor
特别过时。如果您要使用“房间”之类的现代事物,请全盘使用现代事物(例如,带有协同程序的Kotlin)。
我个人会推荐JobIntentService
(对于Kotlin开发人员)或AsyncTask
(对于使用RxJava的Java开发人员)。
答案 1 :(得分:0)
创建一个Observable,并在其中编写逻辑。您可以订阅可观察对象并获取布尔值。
PagedData