Android-异步访问房间数据库的最佳方式

Android-异步访问房间数据库的最佳方式,android,android-asynctask,intentservice,android-room,Android,Android Asynctask,Intentservice,Android Room,所以我有一个房间数据库,里面存储了一些用户。这是当前我用来访问数据库和获取数据的方法 User user; userDAO = AppDatabase.getAppDatabase(getApplicationContext()).userDao(); Thread thread = new Thread(new Runnable() { @Override public void run() { user = us

所以我有一个房间数据库,里面存储了一些用户。这是当前我用来访问数据库和获取数据的方法

    User user;
    userDAO = AppDatabase.getAppDatabase(getApplicationContext()).userDao();
    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            user = userDAO.getUser("testuser1");
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    String name = user.getName();
                }
            });
        }
    });
    thread.start();
我的问题是,有没有更好的方法来做到这一点。我在我的活动代码中做这些,我想把它清理干净

您将如何实现一个静态或抽象类之类的东西,该类具有对主线程/活动的回调,以便我可以侦听响应。我还不熟悉异步任务,所以如果我太笨,我道歉


我还需要能够访问数据库从我的服务一直在运行。此外,有时在调用OnDestroy()方法时,我需要保存一些数据,如果从那里运行线程,则会导致崩溃。也许是一种服务?但是我需要能够调用不同的方法来获取和保存不同的对象

在AppDatabase类中,必须使用以下代码:

@Database(entities = {User.class},version = 1)
public abstract class AppDatabase extends RoomDatabase
{
     public abstract  userDAO userDao();
}
在UserDAo类中,必须使用以下代码:

@Query("select * from User where user =:search")
User getUser(String search);
User user;
public static AppDatabase database=null;
if (database==null)
    {
        database= Room.databaseBuilder(getApplicationContext(),AppDatabase.class,"nameOfDatabase")
                .allowMainThreadQueries().build();
    }
user=database.userDao.getUser("testuser1");
要使用这些方法,您可以使用以下代码:

@Query("select * from User where user =:search")
User getUser(String search);
User user;
public static AppDatabase database=null;
if (database==null)
    {
        database= Room.databaseBuilder(getApplicationContext(),AppDatabase.class,"nameOfDatabase")
                .allowMainThreadQueries().build();
    }
user=database.userDao.getUser("testuser1");

您正在主线程上的主线程上查询数据库,这与异步访问房间数据库的最佳方式是什么?