彼らはのonCreateでレルムのインスタンスをインスタンス化のonDestroyでそれを閉じますアクティビティ
これは、UIスレッドのRealm用です。
あなたが受け取るRealm
インスタンスがスレッドローカル参照カウントインスタンスではなく、「スレッドセーフ」シングルトンローカルデータソース
にそれを注入します。したがって、おそらくRealm
を直接注入するべきではありません。その場合、特定のスレッドに限定されます。レルムはRealmResultsが有効である場合にのみ通知を提供するため、
は、一般的にUIスレッドレルムは、レルムのインスタンスが開いていることを意味する、ViewModel
、retained fragment
、onCreate()
/onDestroy()
とすべてのことによって管理することができます。あなたが見ることができるように
だから、どのスレッドでRealmResultsを露出させ、それがRealmResultsであるという事実のとらわれない、あなたは
public Flowable<List<ChatsModel>> getAllChatsData(Realm realm) {
RealmQuery<ChatsModel> query = realm.where(ChatsModel.class);
if(realm.isAutoRefresh()) {
return query.findAllAsync().asFlowable().filter(RealmResults::isLoaded);
} else {
return Flowable.just(query.findAll());
}
}
を行う必要があるだろう、これはその入力としてRealm
インスタンスを受け取ります。そのパラメータを削除したい場合は、ローカルデータソースから公開しているもので参照カウントを非表示にする必要があります。LiveData
は、onActive()
/onInactive()
コールバック。
次にあなたがLiveDataを公開することができます:
public class MyDao {
public LiveData<List<MyObject>> findMyObjectsWithChanges() {
return new RealmLiveData<MyObject>(new QueryDefinition<MyObject>() {
@Override
public RealmResults<MyObject> createResults(Realm realm) {
return realm.where(MyObject).findAllAsync();
}
});
}
}
ラムダ式は、だから、に探して価値がある可能性があります多くのよりよい
public class MyDao {
public LiveData<List<MyObject>> findMyObjectsWithChanges() {
return new RealmLiveData<MyObject>((realm) -> realm.where(MyObject.class).findAllAsync());
}
}
ことを確認してください。