在视图模型构造函数上初始化实时数据



我只是安卓编程的初学者。最近,我正在阅读有关对数据库进行更改时房间数据库如何返回自动更新的实时数据的文章。我正在使用视图模型类实例来保存我的实时数据,如下所示

public class LogVM extends AndroidViewModel{
MasterDatabase roomDatabase;
LiveData<List<Log>> logData;
LogVM(Application application){
super(application);
roomDatabase=MasterDatabase.getInstance(application);
logData=roomDatabase.getLogDao.getAllLogs();
}
public LiveData<List<Log>> getLogData() {
return logData;
}
}

上面的代码实际上工作正常。但我的问题是,在构造函数中初始化 logdata 时,我们不是在主线程上运行数据库操作吗?但是代码在没有任何警告的情况下编译和运行。有人可以解释一下如何吗?对不起,如果这是一个愚蠢的问题。但我只是一个初学者!

Room 将为您创建代码,以确保在执行数据库代码时将其调度在后台线程上。如果你查看生成的代码,你会发现DAO类使用一个名为ComputableLiveData的内部类,该类使用IOThreadExecutor来执行其工作。

文档中对此进行了简要说明。 https://developer.android.com/topic/libraries/architecture/livedata

房间持久性库支持可观察的查询,这些查询返回 LiveData 对象。可观察查询作为数据库访问对象 (DAO( 的一部分编写。

Room 生成所有必要的代码,以便在更新数据库时更新 LiveData 对象。生成的代码在需要时在后台线程上异步运行查询。此模式可用于使 UI 中显示的数据与数据库中存储的数据保持同步。您可以在房间持久库指南中阅读有关房间和 DAO 的更多信息。

最新更新