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

Android 如何指定要运行的线程室实时查询?,android,android-room,android-architecture-components,Android,Android Room,Android Architecture Components,我的应用程序中有一个类,包含磁盘/网络操作的执行器,如。是否可以告诉Room使用其中一个来执行实时查询?如果使用LiveData,则无需使用执行器来选择数据。因为LiveData在默认情况下是从UI线程运行的 executor. mainThread().execute(...runnable...); 不过,插入、更新和删除都需要它 你可以这样使用,我想: executor.diskIO().execute(...runnable...); // recommended for db

我的应用程序中有一个类,包含磁盘/网络操作的执行器,如。是否可以告诉Room使用其中一个来执行实时查询?

如果使用LiveData,则无需使用执行器来选择数据。因为LiveData在默认情况下是从UI线程运行的

executor. mainThread().execute(...runnable...); 
不过,插入、更新和删除都需要它

你可以这样使用,我想:

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
另一方面,这个类不能用于db查询,因为它在UI线程上运行(查看私有内部类)。这将无法实现让db查询在UI线程之外运行的目的。它适用于您需要在UI线程中的特定用例

executor. mainThread().execute(...runnable...); 
综上所述:

  • 使用LiveData时,在执行select语句时不需要执行器
  • 对于插入、删除、更新或非LiveData对象,您需要在UI线程外运行查询
  • 在这种情况下,您必须使用
    executor.diskIO().execute(newrunnable(){…})

我可以为实时查询确定一个协同程序上下文吗?room甚至支持协同路由吗?在协同路由中封装一个返回LiveData的dao操作有意义吗?查询仍将在由room决定的线程中执行。您是对的。它们已经异步运行了