不管是什么操作符,或者是Observable.create()使用了线程调度,都会失效
例如下面这段代码:
Observable.timer(10, TimeUnit.SECONDS)
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
view.errorOperate(0);
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
LogUtils.saqinoError("Observable timer 出错 " + throwable.getMessage());
}
});
最后发现是一个Observable中新建的另一个Observable,如果这两个Observable最后subscribe拿到的Disposable对象被同一个 CompositeDisposable (订阅管理者)接受,那么第二个Observable将失效。例如下面这段代码:
rxManager是一个封装了CompositeDisposable 的类对象,register方法是将subscribe拿到的Disposable对象 add进去,此时timer操作符中代码失效,无法运行。
rxManager.register(model.openBee().subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean aBoolean) throws Exception {
LogUtils.saqinoError("开启蜂鸣器成功");
rxManager.register(Observable.timer(5, TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
view.errorOperate(0);
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
view.showToast(throwable.getMessage());
view.errorOperate(0);
}
}));
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
view.showToast(throwable.getMessage());
view.errorOperate(0);
}
}));
解决方法就是不使用同一个订阅管理器。。自行处理第二个操作符的Disposable对象
————————————————————————————————————————————————————————
以上貌似作废。。
现在发现使用了线程调度就不能被 CompositeDisposable (订阅管理者)接受,原因暂时未知。