繁体   English   中英

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

[英]Can I use the same RoomDatabase object from multiple threads on Android?

我在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<WorkOrder>) ,因此您可以在一个事务中执行此操作。 或者,如果出于任何原因这是不切实际的,请使用@Transaction注释将循环移动到自己的方法中的@Dao类,以指示整个方法应该在单个事务中执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM