我接触过的有2种 方式
1.CompositeSubscription
2.Rxlifecycle https://github.com/trello/RxLifecycle
1.CompositeSubscription
Subscription 类只有两个方法,unsubscribe() 和 isUnsubscribed()。为了防止可能的内存泄露, 在你的 Activity 或 Fragment 的 onDestroy 里,用 Subscription.isUnsubscribed()检查你的 Subscription 是否是 unsubscribed。如果调用了 Subscription.unsubscribe() ,Unsubscribing将会对 items 停止通知给你的 Subscriber,并允许垃圾回收机制释放对象。
防止任何 RxJava 造成内存泄露。如果你正在处理多个 Observables 和 Subscribers, 所有的 Subscription 对象可以添加到CompositeSubscription,然后可以使用CompositeSubscription.unsubscribe()方法在同一时间进行退订(unsubscribed)。
在基类中创建 CompositeSubscription 对象
protected CompositeSubscription mSubscriptions = new CompositeSubscription();
业务处理子类中 添加
mSubscriptions.add(RxBus.getInstance().toObserverable().subscribe(new Action1<RxBus.BusEvent>() {
@Override
public void call(RxBus.BusEvent rxBusEvent){
}
}));
在pause 或 destory 中取消订阅
@Override
public void onDestroy() {
mSubscriptions.unsubscribe();
}
2.RxLifecycle
https://github.com/trello/RxLifecycle
用起来也很简单
Activity/Fragment需继承RxAppCompatActivity/RxFragment,目前支持的有RxAppCompatActivity、RxFragment、RxDialogFragment、RxFragmentActivity。
使用ActivityEvent类,其中的CREATE、START、 RESUME、PAUSE、STOP、 DESTROY分别对应生命周期内的方法。使用bindUntilEvent指定在哪个生命周期方法调用时取消订阅。
//添加上这句话就好了
.compose(this.<String>bindUntilEvent(ActivityEvent.PAUSE))
.compose(bindToLifecycle()) // 管理生命周期, 防止内存泄露