Я хочу запустить наблюдаемое и дождаться его окончания sh, блокируя. Причина в том, что я уже в фоновом потоке, и мне нужно получить результат, чтобы вернуть успех или неудачу.
Тестируя в примере приложения, я делаю:
Completable.fromRunnable(() -> System.out.println(String.format("[%s] observable", Thread.currentThread().getName())))
.subscribeOn(Schedulers.single())
.doOnComplete(() -> System.out.println(String.format("[%s] complete", Thread.currentThread().getName())))
.blockingAwait();
System.out.println(String.format("[%s] main", Thread.currentThread().getName()));
Что печатает (как я и ожидал):
[RxSingleScheduler-1] observable
[RxSingleScheduler-1] complete
[main] main
Однако в моем приложении Android я нахожусь в контексте потока адаптера syn c (фонового потока), и я делаю то же самое (?):
syncApps.getObservable(SyncApps.DOWNLOAD)
.subscribeOn(Schedulers.single())
.doOnComplete(() -> { ... })
.doOnError(t -> { ... }
.blockingAwait();
Когда я регистрирую поток из наблюдаемой, возвращенной из syncApps.getObservable()
, я все еще в том же потоке, из которого я инициировал вызов:
03-13 09:55:33.674 22201 25389 I SyncApps: getObservable(SyncApps.java:60): [SyncAdapterThread-2] Started...
...
03-13 09:55:33.683 22201 25389 I SyncApps: getObservable(SyncApps.java:81): [SyncAdapterThread-2] Finished
Почему я не работаю на Schedulers.single()
? Я не вижу, что будет по-другому.