# 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("内存泄漏测试"))
|
# 解决内存泄漏
在 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
| 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("内存泄漏测试"));
|