RxJava并不会自动防止这种情况发生,好在它可以很容易地防止内存泄露。Observable.subscribe()
方法会返回一个Subscription
对象,这个对象仅仅有两个方法:isSbscribed()
与unsubscribe()
。你可以在Activity/Fragment的onDestroy
方法中调用Subscription.isSubscribed()
检测是否这个异步任务仍在进行。如果它仍在进行,则调用unsubscribe()
方法来结束任务,从而释放其中的强引用,防止内存泄露。如果你使用了多个Observable
与Subscriber
,那么你可以将它们添加到CompositeSubscription
中,并调用CompositeSubscription.unsubscribe()
结束所有的任务。
参考:https://github.com/hehonghui/android-tech-frontier/blob/master/issue-34/%E5%9C%A8Android%E5%BC%80%E5%8F%91%E4%B8%AD%E4%BD%BF%E7%94%A8RxJava.md