我的团队开发了一个新的Android应用程序,广泛使用Room。
我不确定我们是否正确使用AsyncTask。
我们不得不在AsyncTasks中包含所有调用insert / update / delete,这导致了大量的AsyncTasks。所有进入房间的电话都来自后台服务。活动或片段没有直接的房间访问权限 - 他们通过LiveData获取所有内容。
插入行的示例调用:
AsyncTask.execute(() -> myModelDAO.insertInstance(myModel));
在DAO中有这个:
@Insert
void insertInstance(MyModel model);
答案 0 :(得分:12)
要完成@CommonsWare答案,您可以使用Executor类在后台线程中执行Room查询。
Executor myExecutor = Executors.newSingleThreadExecutor();
myExecutor.execute(() -> {
myModelDAO.insertInstance(myModel)
});
Google在他们的Android架构组件guide上展示了一个示例。
答案 1 :(得分:4)
进入Room的所有电话均来自后台服务
然后你不应该使用AsyncTask
。 AsyncTask
仅用于在后台工作后想要在主应用程序线程上工作,而服务几乎不是这种情况。使用其他东西(线程,线程池,RxJava等)。这与Room没有任何关系。
答案 2 :(得分:0)
AsyncTask.execute(() -> myModelDAO.insertInstance(myModel));
看起来不正确你可以使用Simple Thread / Threadpool / Schedulers等
答案 3 :(得分:0)
您可以使用Consumer<List<object>>callback
之类的回调。
例如:
roomManger.getAllUsertById(user.getId(), this, new Consumer<List<User>>() {
@Override
public void accept(List<Product> listOfUser) {
users.addAll(listOfUser)}