Realm 领域-反应式扩展RxJava2
我将Realm与RxJava2结合使用。领域实例必须由程序员关闭还是自动关闭 我对这条链有一个问题:Realm 领域-反应式扩展RxJava2,realm,rx-java2,Realm,Rx Java2,我将Realm与RxJava2结合使用。领域实例必须由程序员关闭还是自动关闭 我对这条链有一个问题: return Observable.merge( getEvents .toObservable() , mChangeEventsNotification .flatMapMaybe(notification -> getEvents .firstElement()
return Observable.merge(
getEvents
.toObservable()
,
mChangeEventsNotification
.flatMapMaybe(notification ->
getEvents
.firstElement()
)
)
Realm抛出java.lang.IllegalStateException:此Realm实例已关闭,无法使用
getEvents的实现与getList()相同
我观看了RealmObservableFactory的实现
运算符firstElement能否关闭合并运算符的第一个可观察对象的域实例
域实例在一个线程内的所有观察者之间共享
它看起来像领域版本4.3.3的bug。当我降级到4.1.0版时,一切都正常。可能是ref count的问题。为了回答您的问题,我将询问Rx集成的源代码:
public Flowable<RealmResults<E>> asFlowable() {
if (realm instanceof Realm) {
return realm.configuration.getRxFactory().from((Realm) realm, this);
在这种情况下,将使用您调用的asFlowable()
on的RealmResults的Realm实例来获取其RealmConfiguration,并且在创建Flowable的线程(即UI线程或处理程序线程)上增加ref计数
这意味着即使是以下场景也可以工作:
public Flowable<List<MyObject>> getList() {
try(Realm realm = Realm.getDefaultInstance()) {
return realm.where(MyObject.class)
.findAllAsync()
.asFlowable()
.filter(RealmResults::isLoaded);
} // auto-close
}
公共可流动getList(){
try(Realm-Realm=Realm.getDefaultInstance()){
返回realm.where(MyObject.class)
.findAllAsync()
.asFlowable()
.filter(RealmResults::isLoaded);
}//自动关闭
}
只要你不取消订阅,与这个可流动的领域将保持开放
要回答您的问题,是的,您确实需要关闭从某处获得RealmResults的领域实例
public Flowable<List<MyObject>> getList() {
try(Realm realm = Realm.getDefaultInstance()) {
return realm.where(MyObject.class)
.findAllAsync()
.asFlowable()
.filter(RealmResults::isLoaded);
} // auto-close
}