根据文档:
除非您在构建器上调用allowMainThreadQueries(),否则房间不支持主线程上的数据库访问,因为它可能会长时间锁定UI。异步查询(返回LiveData或Flowable实例的查询)不受此规则的限制,因为它们在需要时在后台线程上异步运行查询。
我想知道LiveData可观察对象如何在后台工作并异步获取包装对象?
答案 0 :(得分:0)
LiveData完全是关于主线程(ui)的,当您创建dao类时,是这样的:
@Dao
public interface DaoExample {
@Query("select * from example")
LiveData<List<ExampleModel>> getAllModels();
}
在引擎盖下创建所有需要的东西,一些用于后台处理的线程,用于发布表中最新数据的实时数据,等等。所有这些逻辑都封装在dao /数据库中。当您插入新行时,房间将保存它(工作线程),然后通知所有可观察到的流(ui线程)。