我在Room DAO上有一些查询,有时需要在后台线程中同步使用,而有时在MainThread上异步使用,以返回LiveData。
当前,我执行同一查询的两个版本:
@Query("SELECT * FROM Entity")
abstract fun list(): LiveData<List<Entity>>
@Query("SELECT * FROM Entity")
abstract fun listNow(): List<Entity>
是否有一种方法可以强制第一种方法同步运行,所以我不需要两个相等的查询?
答案 0 :(得分:0)
少量笔记
首先,Room
不允许在框外进行同步查询。
接下来,Room
的体系结构/设计实际上是为了异步调用而设计的,因为这些查询不是立即获取的。
Room确保数据库永远不会在主线程上访问,因为它可能会锁定主线程并触发ANR。如果需要从主线程访问数据库,则应始终使用异步替代方法或将调用手动移至后台线程。
您可以做什么
在设置数据库时,可以通过显式调用allowMainThreadQueries
来允许它。
参考