RxLifecycle防内存泄露
RxLifecycle源码地址
RxJava进行订阅,当推出Activity/Fragment时自动取消订阅,从而避免内存泄露。
依赖库
// RxLifecycle基础库
implementation 'com.trello.rxlifecycle2:rxlifecycle:2.1.0'
// Android使用的库,里面使用了Android的生命周期方法
// 内部引用了基础库,如果使用此库则无需再引用基础库
implementation 'com.trello.rxlifecycle2:rxlifecycle-android:2.1.0'
// Android组件库,里面定义了例如RxAppCompatActivity、RxFragment之类的Android组件
// 内部引用了基础库和Android库,如果使用此库则无需再重复引用
implementation 'com.trello.rxlifecycle2:rxlifecycle-components:2.1.0'
// Android使用的库,继承NaviActivity使用
implementation 'com.trello.rxlifecycle2:rxlifecycle-navi:2.1.0'
// Android使用的库,继承LifecycleActivity使用
// 需要引入Google的仓库支持,用法和rxlifecycle-navi类似
implementation 'com.trello.rxlifecycle2:rxlifecycle-android-lifecycle:2.1.0'
// Google的仓库支持
allprojects {
repositories {
jcenter()
maven { url 'https://dl.google.com/dl/android/maven2/' }
}
}
// 支持Kotlin语法的RxLifecycle基础库
implementation 'com.trello.rxlifecycle2:rxlifecycle-kotlin:2.1.0'
// 支持Kotlin语法的Android库
implementation 'com.trello.rxlifecycle2:rxlifecycle-android-lifecycle-kotlin:2.1.0'
继承
Activity/Fragment需要继承以下类:
RxActivity
RxAppCompatActivity
RxFragment
RxFragmentActivity
RxDialogFragment
RxAppCompatDialogFragment
RxPreferenceFragment
具体用法
1.指定在那个Activity生命周期自动取消订阅。
bindUntilEvent(ActivityEvent event)
public enum ActivityEvent {
CREATE,
START,
RESUME,
PAUSE,
STOP,
DESTROY
}
public class MainActivity extends RxAppCompatActivity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rxJavTest();
}
private void rxJavTest() {
Observable.range(1, 10)
.subscribeOn(Schedulers.io())
.compose(this.<Integer>bindUntilEvent(ActivityEvent.DESTROY))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
Log.d(TAG, "accept: " + integer);
}
});
}
}
2.Activity生命都是成对的,如在onCreate中调用此方法,则在onDestory中自动取消订阅。
bindToLifecycle()
onCreat - onDestory
onStart - onStop
onResume - onPause
public class MainActivity extends RxAppCompatActivity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rxJavTest();
}
private void rxJavTest() {
Observable.range(1, 10)
.subscribeOn(Schedulers.io())
.compose(this.<Integer>bindToLifecycle())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
Log.d(TAG, "accept: " + integer);
}
});
}
}