RxJava

# RxRoom

  • Observable :流式数据类型
  • Flowable :与 Observable 类似,支持背压
  • Single :单发数据类型,只能且必须发射一个数据
  • Maybe :单发数据类型,发射零个或一个数据
  • Completable :不发射任何数据,只通知流的结束。

# 测试内存泄漏

1
2
3
4
Observable.interval(1, TimeUnit.SECONDS)  
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(s-> Timber.d("内存泄漏测试"))

# 解决内存泄漏

    1. 使用 CompositeDisposable

在 Activity 中定义 CompositeDisposable

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private CompositeDisposable mCompositeDisposable;

protected void addSubscribe(Disposable disposable) {
if (mCompositeDisposable == null) {
mCompositeDisposable = new CompositeDisposable();
}
mCompositeDisposable.add(disposable);
}

@Override
public void onDestroy() {
super.onDestroy();
if (mCompositeDisposable != null && !mCompositeDisposable.isDisposed()) {
mCompositeDisposable.dispose();
}
}

在 ViewModel 中重写

1
2
3
4
5
6
7
@Override
protected void onCleared() {
super.onCleared();
if (mCompositeDisposable != null && !mCompositeDisposable.isDisposed()) {
mCompositeDisposable.dispose();
}
}

使用

1
2
3
4
5
6
7
8
9
addSubscribe(observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(resultBean -> {
if (CollectionUtils.isNotEmpty(resultBean.getData())) {
adapter.addItem(resultBean.getData());
}
})

);
    1. 使用 AutoDispose
      导入依赖
1
implementation 'com.uber.autodispose:autodispose-android-archcomponents:1.4.0'

使用

1
2
3
4
5
Observable.interval(1, TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.as(AutoDispose.autoDisposable(AndroidLifecycleScopeProvider.from(this)))
.subscribe(s-> Timber.d("内存泄漏测试"));