Rx 生命周期 管理

我接触过的有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()) // 管理生命周期, 防止内存泄露

你可能感兴趣的:(Rx 生命周期 管理)