Observable запускается в главном потоке, даже если метод subscribeOn () вызывается в другом потоке

У меня возникла странная проблема в одном из моих занятий. Когда возвращаюсь с фото / видео, в моемonActivityResult Я показываю диалог, который позволяет пользователю назвать камеру. Как только пользователь нажимает ОК, я отправляюonNext() субъекту с запрошенным именем файла, который копирует файл (и показывает диалог прогресса).

По какой-то причинеmap() функция, которая делает копию всегда вызывается в главном потоке, хотя я вызываюsubscribeOn(Schedulers.io()).

@Override
protected void onActivityResult(final int requestCode, int resultCode, Intent intent) {
    ...

    final PublishSubject<String> subject = PublishSubject.create();`

    mSubscription = subject
            .subscribeOn(Schedulers.io())
            .map(new Func1<String, String>() {
                @Override
                public String call(String fileName) {
                    Log.I.d(TAG,"map");
                    return doSomeIOHeavyFuncition();
                }
            })
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Action1<String>() {
                @Override
                public void call(final String fullPath) {
                    Log.d(TAG,"onNext");
                    doSomethingOnUI(fullPath);

                    subject.onCompleted();
                }
            }, new Action1<Throwable>() {
                @Override
                public void call(Throwable throwable) {
                    ...
                }
            }, new Action0() {
                @Override
                public void call() {
                    ...
                }
            });

    final AlertDialog dialog = new AlertDialog.Builder
    ....
    .create()
            .show();

    dialog.getButton(DialogInterface.BUTTON_POSITIVE)
            .setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    String someString = getStringFromDialog(dialog);

                    dialog.dismiss();
                    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(input.getWindowToken(), 0);

                    showProgressDialog();
                    subject.onNext(someString);
                }
            });
}

ИзменениеsubscribeOn(Schedulers.io()) позвонитьobserveOn(Schedulers.io()) решил проблему. Тем не менее, я хотел бы знать, почему это не сработало ...

Ответы на вопрос(1)

Ваш ответ на вопрос