子线程可以修改UI吗?为什么会产生这样的问题,可能是因为在开发过程中遇到了
"Only the original thread that created a view hierarchy can touch its views."
这个异常信息,又或者是常用Handler将子线程中的数据更新到UI上,又或者是其他的一些原因,如果你思考到了为什么要在主线程中更新UI或者子线程中可以更新UI吗这样的问题,说明你有一颗探寻问题本质的心,对于技术从业者来讲,是极为有益的,知其然更要知其所以然,接下来,就一起看看其中的逻辑。
先说结论,子线程是可以修改的UI的,例如下面这行代码
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.yourlayoutid);
new Thread(new Runnable() {
@Override
public void run() {
mContentTv.setText("我是来自子线程的更新信息");
}
}).start();
}
但是如果给这个线程做个延迟,或者使用按钮点击来执行,就会看到上面熟悉的异常信息了,那么我们从这个异常信息入手,这个异常信息是在ViewRootImpl中抛出的