使用RXJava的注意事项:
-2018-07-23
1.切断数据流的传递:
1.1 收集所有的 Dispose对象;
mCompositeDisposable.add(s)
1.2 集中切断上下游的数据传递:
this.mCompositeDisposable.dispose();
本质:是设置一个 dispose 变量,根据这个变量判断是否可以传递数据;
2.设置 ObservableOnSubscribe 为静态的内部类;
本质:使得内部类在实例化的过程中,不持有外部类的引用;
3.结束的时候,需要设置 Consumer 对象为null;
方法: 执行 onTerminateDetach()操作;
本质:把引用的内部类对象置为null;
例子:
Disposable disposable = Observable.create(new LoadAllFilesSubscribes())
.subscribeOn(Schedulers.io())//observable run on io thread
.observeOn(AndroidSchedulers.mainThread())//observe run on main thread
.onTerminateDetach()//当数据切断的时候,要执行此操作,防止内存泄露
.map(new Function(){//因为这里再一次有了内部类的操作,要再一次用onTerminateDetach
..........
})
.onTerminateDetach()//当数据切断的时候,要执行此操作,防止内存泄露
.subscribe(new Consumer>() {
@Override
public void accept(List fileItems) throws Exception {
//更新UI
//updateView(fileItems);
mAdapter.getItems().addAll(fileItems);
}
});
//收集Dispose
addDisposable(disposable);
private static class LoadAllFilesSubscribes implements ObservableOnSubscribe>{
@Override
public void subscribe(ObservableEmitter e) throws Exception {
//load all files
List list = AllDocSeekUtil.getLocalDocSearchResult();
e.onNext(list);
}
};
@Override
protected void onDestroy() {
super.onDestroy();
//切断上下流的数据传输;
removeDisposable();
}
网友评论