私のチームは、Roomを広く利用する新しいAndroid=アプリを開発しました。
AsyncTaskを正しく使用しているかどうかはわかりません。
挿入/更新/削除へのすべての呼び出しをAsyncTasksでラップする必要があり、その結果、膨大な数のAsyncTasksが発生しました。ルームへのすべての通話はバックグラウンドサービスからのものです。アクティビティやフラグメントから直接ルームにアクセスすることはできません。LiveDataを介してすべてを取得します。
行を挿入する呼び出しの例:
AsyncTask.execute(() -> myModelDAO.insertInstance(myModel));
これでDAOに:
@Insert
void insertInstance(MyModel model);
ルームへのすべての通話はバックグラウンドサービスからのものです
次に、AsyncTask
を使用しないでください。 AsyncTask
is onlyは、バックグラウンド処理を行った後にメインアプリケーションスレッドで処理を行いたい場合に使用します。これは、サービスの場合はほとんどありません。他のもの(スレッド、スレッドプール、RxJavaなど)を使用します。これはRoomとは関係ありません。
Consumer<List<object>>callback
のようなコールバックを使用できます。例えば:
roomManger.getAllUsertById(user.getId(), this, new Consumer<List<User>>() {
@Override
public void accept(List<Product> listOfUser) {
users.addAll(listOfUser)}
AsyncTask.execute(() -> myModelDAO.insertInstance(myModel));
正しくないように見えますが、単純なスレッド/スレッドプール/スケジューラなどを使用できます