android - 为什么当我在另一个线程 (RxIoScheduler-4) 中修改 UI 时它可以正常工作?
问题描述
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: login thread RxIoScheduler-4”,下一次登录subscribe是“I/LOGIN: cache thread main”,所以Flatmap的线程如果是RxIoScheduler-4,我修改UI在这个线程,但它没有错并且运行良好。这很奇怪,hideLoading()
方法如下。为什么我可以在其他线程中操作 UI?
public void hideLoading() {
if (mLoadingDialog != null) {
mLoadingDialog.dismissAllowingStateLoss();
}
}
解决方案
推荐阅读
- java - Springboot crud Repository插入空值
- python - 值“蛇”不支持成员资格测试 python 或 python 3.6
- html - Bootstrap4 对齐移动支付按钮两排三排
- python - 将图像从 StringIO 存储到文件会创建失真图像
- css - 为什么图片没有出现在背景中
- oracle - 标题:如何使用在 select 语句中获取记录的函数
- java - 需要提取一个接口,但是在实现中有一种方法是额外的
- postgresql - debezium 是否支持捕获 postgres 模式更改事件?
- python - shapiro 和 normaltest 可以在 python 中互换使用吗?
- python - 如何从图形数据中标记作为循环中初始顶点的节点