presenter.login(user)
.flatMap(new Func1<Boolean, Observable<?>>() {
@Override
public Observable<?> call(Boolean result) {
if(result){
Log.i(TAG, " login thread "+Thread.currentThread().getName());
hideLoading();
presenter.saveLoginState(getIntent(),user,type);
finish();
return CampusFactory.getRetrofitService()
.cache(new A(Integer.parseInt(user.sid),user.password));
// TODO: 18-10-13 添加一个错误处理
//.onErrorResumeNext();
}
return Observable.error(new Throwable());
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(msg->{
Log.i(TAG, " cache thread "+Thread.currentThread().getName());
Logger.i(((Msg)msg).getMsg());
},Throwable::printStackTrace);
Первый журнал в Flatmap - это «I / LOGIN: поток входа в RxIoScheduler-4», а следующий журнал в подписке - «I / LOGIN: основной поток кэша», поэтому поток Flatmap, если RxIoScheduler-4и я изменяю пользовательский интерфейс в этой теме, но он не ошибается и работает хорошо.Это очень странно, и метод hideLoading()
выглядит следующим образом.Почему я могу управлять пользовательским интерфейсом в другом потоке?
public void hideLoading() {
if (mLoadingDialog != null) {
mLoadingDialog.dismissAllowingStateLoss();
}
}