我可以在Android上的多个线程中使用相同的RoomDatabase对象吗?

我在Android上使用Room persistence库。 目前,每次访问数据库时都会有一些额外的同步代码。 我想知道这段代码是否必要。

我目前以单身人士的身份访问数据库。 这就是我当前将对象插入数据库的方式:

// 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); } } } }); 

我是否需要在同步块中插入代码?

RoomDatabase包装标准的SQLiteDatabase ,它是相当线程安全的,所有工作都在事务中完成。

我不太担心synchronized和更多关于事务,因为现在,这项工作是在N个事务中完成的(每个WorkOrder一个)。 我会有一个insertAll(List) ,因此您可以在一个事务中执行此操作。 或者,如果出于任何原因这是不切实际的,请使用@Transaction批注将循环移动到自己的方法中的@Dao类,以指示整个方法应该在单个事务中执行。