gpt4 book ai didi

java - 从不同线程访问 Realm 数据库对象问题(仅在某些设备上)

转载 作者:行者123 更新时间:2023-12-02 10:44:49 27 4
gpt4 key购买 nike

我有一个单例类“RealmDatabaseManager”,其中有用于从 Realm 本地数据库读取/写入的同步方法。

这些方法如下所示:

public long getPendingImagesCount() {
synchronized (this) {
realm = Realm.getInstance(RealmUtils.getRealmConfiguration());
long count = realm.where(PatientRecordImage.class)
.count();
realm.close();
return count;
}
}

其中 this 是单例类的实例。

这些方法是通过单例实例从主线程和工作线程访问的。每个方法都会创建和关闭它自己的 Realm 。

该代码在我正在测试的设备上运行没有问题,但我收到了来自某些设备的 Crashlytics 报告,给出了两个 fatal error 。

IllegalStateException: Realm 对象只能在创建它们的线程上访问。

还有

IllegalStateException:Realm 实例只能在创建它的线程上关闭。

这种方法有什么问题吗?如果需要可以提供更多信息。

最佳答案

可能是因为您将类变量设置为另一个 Realm ,并且您遇到了一些相当复杂的多线程问题;与设备特定性无关。

解决方案:不设置类级别变量?

public long getPendingImagesCount() {
try(Realm realm = Realm.getInstance(RealmUtils.getRealmConfiguration())) {
return realm.where(PatientRecordImage.class).count();
}
}

关于java - 从不同线程访问 Realm 数据库对象问题(仅在某些设备上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52662724/

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