RxLifecycle解决RxJava内存泄漏问题

RxLifecycle解决RxJava内存泄漏问题

一、RxJava使用问题
使用RxJava发布一个订阅后,当页面被finish,此时订阅逻辑还未完成,如果没有及时取消订阅,就会导致Activity/Fragment无法被回收,从而引发内存泄漏
在这里插入图片描述
目前对RxJava的内存泄漏方法有两种:
1 . 通过封装,手动为RxJava的每次订阅进行控制,在指定的时机进行取消订阅
2 . 使用Daniel Lew的RxLifecycle,通过监听Activity、Fragment的生命周期,来自动断开subscriptioni以防止内存泄漏
二、RxLifecycle
在这里插入图片描述
用途:可以通过绑定生命周期的方式,来解决内存泄漏的问题。
在RxJava中使用compose操作符来绑定容器的生命周期,其中有两种方式:
1 . 使用bindToLifecycle()
以Activity为例子,bindToLifecycle()方法绑定Activity的生命周期,在Activity中使用bindToLifecycle()方法,完成Observable发布的事件和当前的Activity进行绑定,实现生命周期的同步,从而实现当前组件生命周期结束时,自动取消对Observable的订阅
一个简单的例子如下:
在这里插入图片描述
上述例子中,将Observable发布的事件与mRootView这个Activity进行绑定,实现生命周期的同步。此处例子中使用了JessYan大神的MVP框架,因此是经过大神写的RxLifecycleUtils类进行了处理的。
完整的使用方式如下代码所示:
在这里插入图片描述
使用compose(this.bindToLifecycle())方法绑定Activity的生命周期,在onStart()方法中绑定,在onStop方法被调用后会自动解除绑定
特殊情况:如果在onPause/onStop方法中绑定,那么就会在它的下一个生命周期(onStop/onDestory)被调用后解除绑定。
2 . 使用bindUnitEvent()
bindUnitEvent()方法指定在哪个生命周期方法调用时取消订阅。其中的CREATE、START、RESUME、PAUSE、STOP、DESTORY分别对应生命周期内的方法。
在这里插入图片描述
因此使用RxLifecycle完成在容器的 指定生命周期内,RxJava的自动取消订阅只需三步:依赖、继承以及compose操作符。
三、RxLifecycle原理分析
对RxLifecycle的原理有兴趣的同学可以查看“却把清梅嗅”博主的博客:解决RxJava内存泄漏(前篇):RxLifecycle详解及原理分析
在这里插入图片描述
最后有兴趣的同学可以了解一下同样是由Daniel Lew设计的解决RxJava内存泄漏问题的AutoDispose。
AutoDispose相比较于RxLeftcycle更加健硕,并且拥有更优秀的拓展性。具体可以参看“却把清梅嗅”博主的博客(其中对AutoDispose的原理有解析,在学习之前要先理解RxLeftcycle原理):Android架构中添加AutoDispose解决RxJava内存泄漏

资料参考:解决RxJava内存泄漏(前篇):RxLifecycle详解及原理分析
Android 使用RxLifecycle解决RxJava内存泄漏
Github官方地址:RxLifecycle的Github官方

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值