我可以在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
类,以指示整个方法应该在单个事务中执行。
- java.lang.IllegalArgumentException:可能无法回收废弃或附加的视图。 isScrap:false isAttached:true
- RxJava和RxAndroid的组合?
- 什么时候活动的实例变量被初始化?
- WARN / ActivityManager(78):启动超时已过期,放弃唤醒锁定! – >这是什么
- 自定义HTTP方法在Retrofit 2中不起作用
- Android S8 +警告消息“不支持当前的显示大小设置,可能会出现意外行为”
- 是否存在从Eclipse中的相同代码库维护免费和专业应用程序版本的约定?
- read()和readObject()的问题
- Eclipse在调试时跳过行