将Room SQLite中的数据从新线程获取到Android中的主UI线程的最佳做法是什么?
答案 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);
}
}