首页 > 解决方案 > 从不同线程问题访问的领域数据库对象(仅在某些设备上)

问题描述

我有一个单例类“RealmDatabaseManager”,我有synchronized从领域本地数据库读取/写入的方法。

这些方法如下所示:

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

this单例类的实例在哪里。

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

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

IllegalStateException: Realm objects can only be accessed on the thread they were created.

IllegalStateException: Realm instance can only be closed on the thread it was created.

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

标签: javaandroidrealm

解决方案


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

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

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

推荐阅读