说明
mMessageHelper.appendLine("Observable emit 3");
理解成如下打Log,详见 https://github.com/tik5213/DUnit
Log.e("TAG","Observable emit 3");
rxjava2-编译器提示“The result of subscribe is not used”
如下书写,编译器提示 “The result of subscribe is not used”
Observable.create(new ObservableOnSubscribe<Integer>() { // 第一步:初始化Observable
@Override
public void subscribe(ObservableEmitter<Integer> emitter) {
mMessageHelper.printLine("Observable emit 1");
emitter.onNext(1);
mMessageHelper.appendLine("Observable emit 2");
emitter.onNext(2);
mMessageHelper.appendLine("Observable emit 3");
emitter.onNext(3);
mMessageHelper.appendLine("Observable emit 4");
emitter.onNext(4);
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
mMessageHelper.printLine("accept " + integer);
}
});
原因
没有对 subscribe 的返回的对象进行生命周期管理,可能产生内存泄露
解决方案
- 创建一个 CompositeDisposable 对象
- 将 subscribe 的返回值添加到上面创建的对象中
- 在适当的时候调 用CompositeDisposable 对象的 dispose() 方法(比如,在Activity将要销毁的时候)
改正后的代码
CompositeDisposable compositeDisposable = new CompositeDisposable();
@Override
public void callUnit() {
Disposable disposable = Observable.create(new ObservableOnSubscribe<Integer>() { // 第一步:初始化Observable
@Override
public void subscribe(ObservableEmitter<Integer> emitter) {
mMessageHelper.printLine("Observable emit 1");
emitter.onNext(1);
mMessageHelper.appendLine("Observable emit 2");
emitter.onNext(2);
mMessageHelper.appendLine("Observable emit