2017-11-28 19 views
1

私はAndroidでRoom Persistenceライブラリを使用しています。現在、データベースにアクセスするたびに、いくつかの同期コードが追加されています。このコードが必要かどうかを知りたいAndroidで複数のスレッドから同じRoomDatabaseオブジェクトを使用できますか?

私は現在シングルトンとしてデータベースにアクセスしています。 これは私が現在、DBにオブジェクトを挿入しています方法です:

// Insert values into DB 
    final AppDatabase db = AppDatabase.get(this); 
    AsyncTask.execute(new Runnable() { 
     @Override 
     public void run() { 
      synchronized (db) { 
       for (WorkOrder wo : workOrderList) { 
        db.workOrderDao().insertAll(wo); 
       } 
      } 
     } 
    }); 

私は同期ブロックに挿入コードを持っている必要がありますか?

答えて

2

は、スレッドで安全な標準SQLiteDatabaseをラップします。すべての処理はトランザクションで行われます。

​​以上の取引についてはあまり気にならないかもしれませんが、現在、この取引はN件の取引(1件につきWorkOrder)で行われています。 insertAll(List<WorkOrder>)があるので、1回のトランザクションでこれを実行できます。または、理由がわからない場合は、@Transactionアノテーションを使用してループを@Daoクラスに移動し、メソッド全体を1回のトランザクションで実行する必要があることを示します。

関連する問題