在我的应用运行之前,我必须做一些配置,例如安装异常处理程序。因为我的应用有多个入口点(一个Activity
,一个SyncAdapter
)我只想在我的Application
课程中执行此配置一次,并在入口点({{1} },Activity
)。如果在入口点开始时配置已经完成,则仍应提供有关结果的信息。
那是SyncAdapter
类中的Observable
(RxJava 2):
Application
ConnectableObservable<Boolean> observable = Observable.create(…)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.cache()
.publish();
observable.connect();
中的观察者:
Activity
那是observable.subscribe(…);
observable.connect();
中的观察者:
SyncAdapter
observable.blockingSubscribe(…);
observable.connect();
和Observable
中的观察者正在做我想要的事情,即使观察者在Activity
完成工作后连接,也会立即完成。但是Observable
中的观察者在SyncAdapter
完成工作后连接时会永远阻塞。
我的问题:
Observable
?答案 0 :(得分:0)
你最有可能让她陷入僵局:
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
结合:
observable.blockingSubscribe(…);
您在线程池上开始订阅。生成的值将移动到ui循环。同时,您订阅了observable并在ui-loop(主线程)上阻止订阅。在阻止订阅时,由于主线程已被阻止,因此无法推送任何值:死锁。
为什么不使用:
observable.filter(aBoolean -> aBoolean)
.subscribe(aBoolean -> {
// is True so do stuff here::::::
});
请查看可能的解决方案: https://gist.github.com/SergejIsbrecht/2d6a20283d7c3ea304af0cf54f0650b4