从不同线程问题访问的领域数据库对象(仅在某些设备上)

时间:2018-10-05 09:42:49

标签: java android realm

我有一个单例类'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.

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

1 个答案:

答案 0 :(得分:1)

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

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

$local = true;
error_reporting(E_ALL);
header("Access-Control-Allow-Origin: http://www.tuviaje.com.ar, http://tuviaje.com.ar");

if (empty($local)) {
    require "config_remote.php";
} else {
    require "config.php";
}

require __ROOT . "files/php/class/functions.php";
require __ROOT . "files/php/class/Alert.php";
require __ROOT . "files/php/class/Entity.php";
require __ROOT . "files/php/class/Object.php";
require __ROOT . "logic/class/Session/User.php";

session_start();
if (!isset($_SESSION["user".__HASH])) {
    redirect(__URL . "index.php?loggedOut");
}
$__user = $_SESSION["user".__HASH];