在ViewModel构造函数上初始化LiveData

问题描述 投票:1回答:1

我只是android编程的初学者。最近我正在阅读有关房间数据库如何在对数据库进行更改时返回实时数据以进行自动更新的内容。我使用viewmodel类实例来保存我的Livedata,如下所示

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时,我们不是在主线程上运行数据库操作吗?但代码编译并运行没有任何警告。有人可以解释一下吗?很抱歉,这是一个愚蠢的问题。但我只是一个初学者!

viewmodel android-room android-livedata
1个回答
0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.