在新线程中实现 Room SQLIte
Implementing Room SQLIte in new Thread
在 android 中从新线程到主 UI 线程从 Room SQLite 获取数据的最佳做法是什么?
小提醒:这个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);
}
}
在 android 中从新线程到主 UI 线程从 Room SQLite 获取数据的最佳做法是什么?
小提醒:这个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);
}
}