背压,上下游在不同的线程,上游发送的数据多余下游的处理,导致时间越来越多,最后导致OOM(数据是放在缓存池中);
RxJava 生命周期
https://github.com/trello/RxLifecycle
如果我们在第一个界面中使用了RxJava,那么我们跳转到第二个界面的时候,RxJava仍在运行,仍在发送数据。这样activity就泄露了。
管理生命周期,在Activity中添加一个透明的fragment.
添加依赖
implementation 'com.trello.rxlifecycle3:rxlifecycle:3.0.0'
// If you want to bind to Android-specific lifecycles
implementation 'com.trello.rxlifecycle3:rxlifecycle-android:3.0.0'
// If you want pre-written Activities and Fragments you can subclass as providers
implementation 'com.trello.rxlifecycle3:rxlifecycle-components:3.0.0'
以上三个依赖,对应的是androidx。
继承RxAppCompatActivity或RxFragmentActivity等等,fragment也提供了相应的继承类
@Override
public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
我们使用compose操作符来绑定其生命周期,这里我们使用bindUntilEvent绑定,传入的参数有六种,对应activity的生命周期, CREATE, START, RESUME, PAUSE, STOP, DESTROY,我们想让其在什么时候取消订阅就传入对应的生命周期就好了,如以下例子为当生命周期处于stop的时候,取消订阅
compose((RxAppCompatActivity)context.bindUntilEvent(ActivityEvent.STOP))
使用bindToLifecycle方法绑定,这种方法跟随者activity的生命周期,当activity销毁的时候取消订阅
compose(baseApi.getActivity().bindToLifecycle())
在Rxjava中,compose操作符可以用来自定义操作符