Я начинаю изучать Rx
для Android и получаю одну ошибку. Это мой код:ObserveOn не работает
В моей Subscriber
я печатаю войти имя текущего резьбы:
Subscriber<Integer> integerSubscriber = new Subscriber<Integer>() {
// ... onCompleted, onError
@Override
public void onNext(Integer s) {
Log.e("RX", "threadName " + getCurrThreadName());
}
};
Здесь я хочу, чтобы запустить код в фоновом режиме и получить данные из Наблюдаемые в mainThread:
ArrayList list = new ArrayList();
list.add(...) // creating data list
Observable.from(list)
.map(TransformFunc.getTransformer())
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(Schedulers.from(executor))
.subscribe(integerSubscriber);
...
Другой код: static String getCurrThreadName() { return Thread.currentThread(). GetName(); }
static class TransformFunc implements Func1<String, Integer> {
private static TransformFunc instance;
static TransformFunc getTransformer() {
... // return instance
@Override
public Integer call(@NonNull String s) {
...
TimeUnit.SECONDS.sleep(4);
Log.e("RX", "threadName " + getCurrThreadName());
...
return s.length();
}
}
Но когда я запускаю этот код на устройстве я вижу белый экран 5-10 секунд и это в журналах:
12-02 16:34:39.374 26086-26086/com.shevart.fitnessnotes E/RX: threadName main
12-02 16:34:39.378 26086-26180/com.shevart.fitnessnotes E/RX: threadName pool-1-thread-2
12-02 16:34:43.375 26086-26086/com.shevart.fitnessnotes E/RX: threadName main
12-02 16:34:43.379 26086-26216/com.shevart.fitnessnotes E/RX: threadName pool-1-thread-3
12-02 16:34:47.376 26086-26086/com.shevart.fitnessnotes E/RX: threadName main
12-02 16:34:47.396 26086-26253/com.shevart.fitnessnotes E/RX: threadName pool-1-thread-4
12-02 16:34:51.376 26086-26086/com.shevart.fitnessnotes E/RX: threadName main
12-02 16:34:51.398 26086-26292/com.shevart.fitnessnotes E/RX: threadName pool-1-thread-5
Почему onNext()
вызывается перед call()
в карте?
Вы должны добавить дополнительную информацию в свой журнал, чтобы узнать, какой журнал соответствует этому методу. – tynn