Я пытаюсь выяснить, что является лучшим способом открыть/закрыть экземпляры Realm. Мы используем Realm в 3-х местах - приложения, действия и рабочий поток. Однако было бы неплохо обращаться к данным из Realm из любого места. Таким образом, мы завернули все наши запросы/записи в Realm в слое данных. Это нормально (с точки зрения производительности) делать следующие для каждого запроса (и аналогичные при каждой записи)?Можно ли закрыть экземпляр Realm после каждого запроса/записи?
try (Realm realm = getRealm()) {
return realm.copyFromRealm(realm.where(Task.class).isNull("name")
.findAllSorted("createdAt", Sort.DESCENDING));
}
Как вы делаете что-то подобное в транзакции async? Есть ли лучшие подходы? (Мы используем RxJava).
Спасибо!
EDIT: После быстрой реакции от @ Христианско-Мельхиор мы будем использовать его как это:
try (Realm realm = getRealm()) {
return realm.copyFromRealm(realm.where(Task.class).isNull("name")
.findAllSortedAsync("createdAt", Sort.DESCENDING));
}
EDIT2: На самом деле мы остановились на этом:
Realm realm = getRealm();
return realm.where(Task.class).isNull("name")
.findAllSortedAsync("createdAt", Sort.DESCENDING)
.asObservable()
.filter(RealmResults::isLoaded)
.first()
.map(realmObjects -> {
if (realmObjects.isEmpty()) {
realm.close();
return null;
}
List<Task> res = realm.copyFromRealm(realmObjects);
realm.close();
return res;
});
Поскольку мы хотим наш onComplete
, который будет вызываться после каждого запроса.
Спасибо ! Мы будем использовать методы * Async (забыл упомянуть об этом в примере). Почему Realm делает такие жесткие объекты обновления (вам нужно быть в транзакции), что делает абстрагирование от реализации Realm довольно жестким? Есть ли шанс удалить необходимость в 'close()' вообще? – curiousily