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()) // 管理生命周期, 防止内存泄露
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空白的泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值