>我的应用程序中有一个类,其中包含用于磁盘/网络操作的执行器,如下所示。是否可以告诉 Room 使用其中一个来执行实时查询?
如果您使用LiveData,则无需使用Executor
即可选择数据。因为默认情况下,实时数据在 UI 线程之外运行。
不过,您将需要它进行插入,更新和删除。
我认为你可以这样使用它:
executor.diskIO().execute(...runnable...); // recommended for db actions
executor.networkIO().execute(...runnable...); // not recommended for db because a pool of 3 threads can run concurrently, could yield issues
另一方面,这个不能用于数据库查询,因为它在 UI 线程上运行(查看私有内部类(。这将破坏让数据库查询在 UI 线程之外运行的目的。它适用于您需要在 UI 线程中的特定用例。
executor. mainThread().execute(...runnable...);
所以总结一下:
- 使用 LiveData 时,执行 select 语句时不需要执行器
- 对于插入、删除、更新或非 LiveData 对象,您需要在 UI 线程上运行查询
- 在这种特定情况下,您必须使用
executor.diskIO().execute(new Runnable() {...});