Доступ к объектам базы данных Realm из разных потоков (только на некоторых устройствах) - PullRequest
0 голосов
/ 05 октября 2018

У меня есть одноэлементный класс 'RealmDatabaseManager', где у меня есть synchronized методы для чтения / записи из локальной базы данных области.

Методы выглядят так:

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

Где this является экземпляром одноэлементного класса.

Доступ к этим методам осуществляется как из основного, так и из рабочего потоков через экземпляр singleton.Каждый метод создает и закрывает свою собственную область.

Код работает без проблем на устройствах, на которых я тестирую, но я получил отчеты 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 голосов
/ 07 октября 2018

Возможно, потому что вы устанавливаете переменную класса в другое Царство, и у вас есть довольно сложная проблема многопоточности;ничего общего с особенностями устройства.

Решение: не устанавливать переменную уровня класса?

public long getPendingImagesCount() {
    try(Realm realm = Realm.getInstance(RealmUtils.getRealmConfiguration())) {
        return realm.where(PatientRecordImage.class).count();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...