gpt4 book ai didi

android - 为什么我可以通过 looper 在非 uithread 中触摸 UI?

转载 作者:太空狗 更新时间:2023-10-29 13:23:40 25 4
gpt4 key购买 nike

    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();
}
});

代码运行正确。

但是 toast 显示:“Thread-217”

这意味着 toast 从非 uithread 显示。

为什么?


我很抱歉。我知道答案。 Toast 是一个特殊的 UI 元素。它可以从任何线程显示。但是其他 UI 元素,例如 Button TextView 只能在 UI 线程中被触及。所以,我的代码运行正确,但是当您将 toast 更改为 Button 时,代码崩溃了。

最佳答案

您正在尝试使用 runnable 在 UI 线程中显示 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();
}
};

关于android - 为什么我可以通过 looper 在非 uithread 中触摸 UI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24752795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com