Я в значительной степени понимаю концепцию подписки (любой код ниже subscribeOn
будет выполняться в этом конкретном потоке) и наблюдаю (то же самое с subscribeOn
) в rxandroid/rxjava.
Что я хочу, так это выполнить длинную операцию ввода-вывода в фоновом потоке, а затем уведомить основной поток, если операции завершены. Для этого я думаю иметь flatmap
, который подписан в Schedulers.io()
, а затем наблюдать subscribe
в AndroidSchedulers.mainThread()
, что-то вроде этого:
Observable.just(1)
.subscribeOn(Schedulers.io())
.flatMap(o -> {
longIO();
return null;})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(//i want to notify user here);
Это фактически выполняет longIO()
в другом потоке, таким образом, не блокируя основной поток, моя проблема в том, что это не уведомляет основной поток о завершении longIO()
, обратите внимание, что Android не позволяет уведомлять пользователя, создавая Toast
или AlertDialog
, если не в основном потоке. Код не проходит через subscribe
Примечание: я использовал just(1)
, хотя я не использую целое число 1, потому что я хочу, чтобы метод внутри flatMap
выполнялся. Если бы я использовал empty
, он не прошел бы через flatMap