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时,会崩溃。
答案 0 :(得分:1)
你试图在UI线程中使用runnable显示toast,这就是为什么它出错了
Thread background = new Thread(new Runnable() {
public void run() {
// Send message to handler
handler.sendMessage(msgObj);
}
};
private final Handler handler = new Handler() {
public void handleMessage(Message msg) {
//Catch the response and show the toast
String aResponse = msg.getData().getString("message");
Toast.makeText(getBaseContext(),"Not Got Response From Server.",
Toast.LENGTH_SHORT).show();
}
};
答案 1 :(得分:1)
您必须在UiThread中创建处理程序。处理程序将消息发送到创建它的线程。
handler = new Handler();
thread = new Thread() {
public void run() {
super.run();
System.out.println("run:" + Thread.currentThread().getName());
Looper.prepare();
Looper.loop();
};
};
thread.start();