问题:“Android只能在UI线程更新UI 么?”
答:“对!......,嗯?不对?”
我脑子里的的回答是“对”,但是辩证思维又在提醒我可能有陷阱,于是我就说“大部分情况是的”。那么小部分情况呢?具体说不上来了!于是才发现这个问题一直被忽略了。
于是试验检验真理,撸代码验证了一遍。
new Thread(){
@Override
public void run() {
super.run();
btn_demo1.setText("Demo1--"+Thread.currentThread().getName());
}
}.start();
奔溃信息:

CalledFromWrongThreadException
问题出现在ViewRootImpl.checkThread()的时候出错
查看ViewRootImpl的源码,导致问题的原因:
public ViewRootImpl(Context context, Display display) {
mContext = context;
mWindowSession = WindowManagerGlobal.getWindowSessi
本文探讨了Android中非UI线程能否操作UI的问题。通常认为只有UI线程能更新UI,但实验结果显示,如果在非主线程创建View,理论上可以在该线程操作。然而,实际操作会遇到奔溃,原因是缺少Looper。添加Looper准备和循环后,非主线程可以成功加载并显示UI。总结指出,Android UI控件通过Handler消息机制保持线程安全,ViewRootImpl.checkThread()检查确保操作在正确线程进行。
订阅专栏 解锁全文
982

被折叠的 条评论
为什么被折叠?



