内容简介:引入我们在之前的注意:Rxlifecycle 版本使用的是
引言
引入 Rx
系列有一个非常大的缺陷:容易造成内存泄露,大多数都是忘记取消订阅而造成的,本篇就以 RxLifecycle
进行封装,在底层实现自动订阅与取消订阅。
正文
分析
我们在之前的 Android 之路 (4) - 对RxJava2的简单封装 中,在 BasePresenter
中有一个 unDisposable
的方法,该方法会在 onDestroy
和 onDialogCance
的时候调用,这已经从一定程度上避免了内存泄露,但是这不够的,接下来就来集成 Rxlifecycle 吧。
注意:Rxlifecycle 版本使用的是 2
编码
引入 Rxlifecycle
在 library-core
中引入:
api 'com.trello.rxlifecycle2:rxlifecycle:2.2.1' api 'com.trello.rxlifecycle2:rxlifecycle-android:2.2.1' api 'com.trello.rxlifecycle2:rxlifecycle-components:2.2.1'
修改继承关系
- SwipeBackActivity
前面的文章中我们集成了 SwipeBackActivity
作为所有 Activity 的基类,所以我们只需要更改 SwipeBackActivity
继承 com.trello.rxlifecycle2.components.support.RxAppCompatActivity
。
- CandyBaseFragment
将 CandyBaseFragment
更改继承为 com.trello.rxlifecycle2.components.support.RxFragment
修改 BasePresenter
在前面的封装中,我们其实是没有持有 BaseView
的,这里我们需要更改一下,增加对 BaseView
的引用,好做接下来的操作。
private BaseView mView; public BasePresenter(BaseView mView) { this.mView = mView; }
绑定生命周期
之前封装过一个用于切换线程的 getScheduler
方法,用于在所有的 presenter
中进行调用,所以接下来的代码就和 getScheduler
合并在一起,代码如下:
/** * 统一线程处理和绑定生命周期 * * @turn * @par<T> */ protected <E> FlowableTransformer<E, E> getScheduler() { //compose简化线程 return new FlowableTransformer<E, E>() { @Override public Flowable<E> apply(Flowable<E> observable) { // 最终用于订阅的 LifecycleTransformer<E> bindUntilEvent = null; // ---------------------------------判断是相应的类型,进行绑定------------ if (mView instanceof RxAppCompatActivity) { bindUntilEvent = ((RxAppCompatActivity) mView).bindUntilEvent(ActivityEvent.DESTROY); } if (mView instanceof RxFragmentActivity) { bindUntilEvent = ((RxFragmentActivity) mView).bindUntilEvent(ActivityEvent.DESTROY); } if (mView instanceof RxActivity) { bindUntilEvent = ((RxActivity) mView).bindUntilEvent(ActivityEvent.DESTROY); } if (mView instanceof RxFragment) { bindUntilEvent = ((RxFragment) mView).bindUntilEvent(FragmentEvent.DESTROY); } if (mView instanceof com.trello.rxlifecycle2.components.support.RxFragment) { bindUntilEvent = ((com.trello.rxlifecycle2.components.support.RxFragment) mView).bindUntilEvent(FragmentEvent.DESTROY); } // ---------------------------------判断是相应的类型,进行绑定------------ Flowable<E> flowable = observable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); if (bindUntilEvent != null) { //绑定 flowable = observable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()).compose(bindUntilEvent); } return flowable; } }; }
运行
其它地方并没有什么修改, getScheduler
的变更是完全兼容以前的老版本的,另外本次修改也和上次看不出什么区别,所以我们直接运行看看吧。
结束
其它
本次顺便修改了 login
的请求地址,以前使用的临时域名已经失效了。
总结
本文篇幅较少,只做了集成介绍和一个小问题的解决方案,这次封装在短期是看不出效果的。
如果可以的话,请给我一个star 仓库地址
广告
来都来了,就给个关注吧,时不时会悄悄的推送一些小技巧的文章~~
软广
来都来了,就给个关注吧,时不时会悄悄的推送一些小技巧的文章~~!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 持续集成:数据库集成及快速构建
- ShareSDK集成及集成后遇到的一些问题【原创】
- 持续集成与持续部署宝典Part 3:创建集成环境
- 持续集成与持续部署宝典Part 2:创建持续集成流水线
- 禅道 12.3.stable 版本发布,全面集成八种单元测试框架,打通持续集成闭环
- 持续集成将死
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Persuasive Technology
B.J. Fogg / Morgan Kaufmann / 2002-12 / USD 39.95
Can computers change what you think and do? Can they motivate you to stop smoking, persuade you to buy insurance, or convince you to join the Army? "Yes, they can," says Dr. B.J. Fogg, directo......一起来看看 《Persuasive Technology》 这本书的介绍吧!