我想弄清楚什麼是打開/關閉Realm實例的最佳方法。我們在3個地方使用Realm - App,Activities和Worker thread。但是,從任何地方訪問Realm的數據可能都很酷。因此,我們將所有的Realm查詢/寫入包裝在數據層中。對於每個查詢(以及每次寫入時的類似操作),是否可以(從性能角度來看)執行以下操作?每次查詢/寫入後關閉Realm實例是否正常?
try (Realm realm = getRealm()) {
return realm.copyFromRealm(realm.where(Task.class).isNull("name")
.findAllSorted("createdAt", Sort.DESCENDING));
}
如何在異步事務中做類似的事情?有更好的方法嗎? (我們正在使用RxJava)。
謝謝!
編輯:後從@基督教梅爾基奧爾快速反應,我們會使用這樣的:
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
將在每個查詢後被調用。
謝謝!我們將使用*異步方法(在示例中忘記提及)。爲什麼Realm如此難以更新對象(你需要在事務中),這使得Realm的實現變得非常困難?任何可能完全不需要close()的機會? – curiousily