依赖代码:
compile 'com.trello:rxlifecycle:1.0'
compile 'com.trello:rxlifecycle-components:1.0'
作用&价值:
作用: 用来解决rxjava在切换线程的时候,出线程错误 bug 用的
价值: 简单方便,易处理,管事儿!!!
详细说明:
该项目是为了防止 RxJava 中 subscription 导致 内存泄漏 而诞生的,核心思想是通过监听Activity、Fragment的生命周期,来 自动断开 subscription以防止内存泄漏。
解释:
简答说,就是当 rxjava 做异步操作的时候, 程序还在异步,但是**activity/fragment生命周期已经**onpause或者ondestory了 , 这个时候 rxjava 要是继续执行 ,最终执行到同步代码中.必然报错!
使用方法&步骤:
1.将Activity / Fragment都继承 RxAppCompatActivity、RxFragment 、 RxActivity …
public class MainActivity extends RxAppCompatActivity
public class MainActivity extends RxFragmentActivity
public class MainActivity extends RxFragment
...
2.在 Observable 处理数据之前, 加入
.compose(basePar.getRxAppCompatActivity().bindUntilEvent(ActivityEvent.PAUSE))
这一行
下面贴上完整代码
Observable observable = basePar.getObservable(retrofit)
/*失败后的retry配置*/
.retryWhen(new RetryWhenNetworkException(basePar.getRetryCount(),
basePar.getRetryDelay(), basePar.getRetryIncreaseDelay()))
/*生命周期管理*/
// .compose(basePar.getRxAppCompatActivity().bindToLifecycle())
.compose(basePar.getRxAppCompatActivity().bindUntilEvent(ActivityEvent.PAUSE))
/*http请求线程*/
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())
/*回调线程*/
.observeOn(AndroidSchedulers.mainThread())
/*结果判断*/
.map(basePar);
这么写, compose() 后面的操作,都将不执行了.也就不会有 因为生命周期,导致的线程异常 了.
比较简单,记得改activity与fragment
记得加上compose() 方法就好!
欢迎小伙伴留言评论!