在新线程中实现Room SQLIte

时间:2017-11-01 12:14:15

标签: sqlite android-room

将Room SQLite中的数据从新线程获取到Android中的主UI线程的最佳做法是什么?

1 个答案:

答案 0 :(得分:2)

一点提醒:这个AsyncTask解决方案只是为了快速实现一些查询。如果您有许多不同的查询,请不要尝试创建一堆AsyncTask子类来处理。更好地了解LiveData方式或自己管理一个线程。

假设您正在查询所有用户的列表:

@Dao
public interface UserDao {
    @Query("Select * FROM User")
    List<User> findAll();
}

示例异步任务

private static class UserTask extends AsyncTask<Void, Void, List<User>> {
    UserDao dao;

    public UserTask(UserDao dao) {
        this.dao = dao;
    }

    @Override
    protected List<User> doInBackground(Void... voids) {
        // this function runs in a background thread managed by system
        return dao.findAll();
    }

    @Override
    protected void onPostExecute(List<User> users) {
        // This runs in UI thread after doInBackground return. Run your ui callback here
        super.onPostExecute(users);
    }
}