gpt4 book ai didi

java - 我可以在 Android 的多个线程中使用同一个 RoomDatabase 对象吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:51:19 25 4
gpt4 key购买 nike

我在 Android 上使用 Room 持久性库。目前,每次访问数据库时我都有一些额外的同步代码。我想知道是否需要此代码。

我目前以单例访问数据库。这就是我目前将对象插入数据库的方式:

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

我需要在同步块(synchronized block)中插入代码吗?

最佳答案

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

我不会担心 synchronized以及更多关于交易的信息,就像现在一样,这项工作正在 N 个交易中完成(每个 WorkOrder 一个)。我会有一个 insertAll(List<WorkOrder>) ,因此您可以在一次交易中执行此操作。或者,如果出于某种原因这是不切实际的,请将循环移动到 @Dao 中。类在它自己的方法中,带有 @Transaction注释,以指示整个方法应在单个事务中执行。

关于java - 我可以在 Android 的多个线程中使用同一个 RoomDatabase 对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47525082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com