【发布时间】:2014-09-05 07:54:22
【问题描述】:
thread = new Thread() {
public void run() {
super.run();
System.out.println("run:" + Thread.currentThread().getName());
Looper.prepare();
handler = new Handler();
Looper.loop();
};
};
thread.start();
然后
handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(MActivity.this,Thread.currentThread().getName(),0).show();
}
});
代码运行正确。
但是吐司显示:“Thread-217”
这意味着 toast 从非 uithread 显示。
为什么?
我很抱歉。我知道答案。 Toast 是一个特殊的 UI 元素。它可以从任何线程显示。但其他 UI 元素,例如 Button TextView 只能在 UI 线程中触摸。 因此,我的代码运行正确,但是当您将 toast 更改为 Button 时,崩溃了。
【问题讨论】:
-
因为你在后台线程中创建了Handler
-
@pskink 说UI操作必须放在UI Thread上?
标签: android multithreading looper