RxJava生存周期(内存占用释放)问题 RxJava不同场景中是否需要手动取消订阅

小学生_hd 2017-10-25 02:24:43
在学习并准备在Android项目中使用RxJava及相关框架,但是还存在一些疑问,谢谢大家,请帮忙解答一下!

1.RxJava创建的观察、被观察者和之间的观察关系,是否是不会自动被回收?
在网上查找的资料显示使用create创建被观察者后手动调用onCompleted,或者直接使用from、just创建的被观察者会自动调用onCompleted,订阅关系会解除。

在和retrofit结合时,资料的大多数做法是retrofit返回RxJava的观察对象,然后指定被观察者线程、观察者执行线程,最后创建观察者处理数据,这里就有了第二个问题:
2.RxJava + Retrofit进行网络请求这一过程是不会自动取消订阅关系的,是不是?
如果是,网上资料采用了RxLifecycle这个框架将请求与Android活动或碎片的生命周期进行关联,进而在活动或碎片的生命周期结束时取消订阅;
3.但即便这样,是不是在一个活动或碎片中n次请求服务依然会不断消耗内存?

基于1、2两个问题,这里就有了第四个问题:
4.解除订阅关系后哪些对象会被释放?

5.RxBinding是否能自动取消订阅?若不能能不能采用RxJava + Retrofit的处理方式在返回得到的observable对象上调用compose转换用RxLifecycle依赖活动或碎片的生命周期进行取消订阅?

...全文
531 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
小学生_hd 2017-11-21
  • 打赏
  • 举报
回复
期待大牛的回答!!!
moonFY 2017-11-21
  • 打赏
  • 举报
回复
第一个:当使用 Observer<T> 这个接口时 需要手动解注,onSubscribe(Disposable d) 就是这种参数的,自己常用的就just 会自动解注。 第二个:上面也提了 只要出现 onSubscribe(Disposable d) 就需要手动解注, RxLifecycle框架没用过。 第三个:解注后,没有了内存泄漏。 第四个:不知道,没注意过。

80,362

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧