如何指定要在其上运行的线程室实时查询?



>我的应用程序中有一个类,其中包含用于磁盘/网络操作的执行器,如下所示。是否可以告诉 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() {...});

相关内容

  • 没有找到相关文章

最新更新