Android Room + AsyncTask

时间:2017-09-29 05:40:32

标签: android-asynctask android-room

我的团队开发了一个新的Android应用程序,广泛使用Room。

我不确定我们是否正确使用AsyncTask。

我们不得不在AsyncTasks中包含所有调用insert / update / delete,这导致了大量的AsyncTasks。所有进入房间的电话都来自后台服务。活动或片段没有直接的房间访问权限 - 他们通过LiveData获取所有内容。

插入行的示例调用:

AsyncTask.execute(() -> myModelDAO.insertInstance(myModel));

在DAO中有这个:

@Insert
void insertInstance(MyModel model);

4 个答案:

答案 0 :(得分:12)

要完成@CommonsWare答案,您可以使用Executor类在后台线程中执行Room查询。

Executor myExecutor = Executors.newSingleThreadExecutor();
myExecutor.execute(() -> {
   myModelDAO.insertInstance(myModel)
});

Google在他们的Android架构组件guide上展示了一个示例。

答案 1 :(得分:4)

  

进入Room的所有电话均来自后台服务

然后你不应该使用AsyncTaskAsyncTask 用于在后台工作后想要在主应用程序线程上工作,而服务几乎不是这种情况。使用其他东西(线程,线程池,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)}