我使用它后是否需要释放/释放Observable对象,以防Observable对象没有被GC吞噬?我没有找到任何文章提及它。 GC会自动使用Observable对象吗?
Observable.create(new ObservableOnSubscribe<Boolean>() {
@Override
public void subscribe(ObservableEmitter<Boolean> e) throws Exception {
boolean connected = true;
//my logic code here
e.onNext(connected);
e.onComplete();
e.setCancellable(null);
//Do I need to do some extra release/free Observable object work in case Observable object is not garbaged by GC?
}
}).subscribeOn(Scheduler.ioThread())
.observeOn(Scheduler.mainThread())
.subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean connected) throws Exception {
//my logic code here.
//Do I need to do some extra release/free Observable object work in case Observable object is not garbaged by GC?
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
//my logic code here.
//Do I need to do some extra release/free Observable object work in case Observable object is not garbaged by GC?
}
});
答案 0 :(得分:2)
Observable
不会自动“释放”任何内容,但会为您提供相应的工具
Observable有一些资源管理方面:
Observable
给你的框架管理,它是Cancellable
/ Disposable
组件,框架保证在适当的时间触发此事件 - 当Observable完成时,取消订阅/处置Observable
时。但是你可以触发相应的逻辑 - 取消网络查询,关闭/释放/关闭IO资源,从你的监听器取消注册等等,这一切都取决于你的制作人逻辑Subscriber
处理/取消订阅Obesrvable
- 而Observable为您提供了清除资源的框架,您可以在显式时间触发它。虽然Observable
会在Observable完成时自动触发它,有时候太晚了你想要取消它(即网络查询),而在其他情况下你的Observable可能是无限项,想想DB插入监听器,点击事件或者任何其他监听器,在这种情况下,资源将被暂停,直到您通过处置Observable
明确释放它为止。Observable
和Subscriber
之间的连接以防止内存泄漏也很重要,因为Subscriber
可能包含对包装类的硬性引用,因此将被Observable泄露。 (带有UI组件的经典,其中订阅者引用一些UI类并订阅一些静态性Observable
)答案 1 :(得分:1)
在大多数情况下,我们不需要显式调用unsubscribe方法,除非我们想要提前取消或我们的Observable的寿命比我们的订阅更长。 Observable操作符的默认行为是在发布.complete()或.error()消息后立即处理订阅。请记住,RxJS的设计大多数时候都是以“一见不醒”的方式使用。 read