强制LiveData同步运行

时间:2019-02-17 14:46:37

标签: android android-room android-livedata

我在Room DAO上有一些查询,有时需要在后台线程中同步使用,而有时在MainThread上异步使用,以返回LiveData。

当前,我执行同一查询的两个版本:

@Query("SELECT * FROM Entity")
abstract fun list(): LiveData<List<Entity>>

@Query("SELECT * FROM Entity")
abstract fun listNow(): List<Entity>

是否有一种方法可以强制第一种方法同步运行,所以我不需要两个相等的查询?

1 个答案:

答案 0 :(得分:0)

少量笔记

首先,Room不允许在框外进行同步查询。

接下来,Room的体系结构/设计实际上是为了异步调用而设计的,因为这些查询不是立即获取的。

  

Room确保数据库永远不会在主线程上访问,因为它可能会锁定主线程并触发ANR。如果需要从主线程访问数据库,则应始终使用异步替代方法或将调用手动移至后台线程。

您可以做什么

在设置数据库时,可以通过显式调用allowMainThreadQueries来允许它。

参考