我正在向与其自己的线程相关联的处理程序发送消息。在 handleMessage 方法中,我尝试使用 runOnUiThread 使用消息内容更新 UI。如果从 handleMessage 获取消息 obj 参数并将其分配给新的最终变量,则此方法工作正常。但是,如果我不使用此分配并直接在可运行对象中获取 msg.obj,则在调用 runOnUiThread 之前检查传递给 handleMessage 的 msg 引用时,即使 msg 引用具有相同的 id,obj 变量也是 null。
为什么会这样?
这是有效的:
bt01.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Message msg = new Message();
msg.obj = new Data("Hi im the message");
mHandler.sendMessage(msg);
}
});
class LooperThread extends Thread {
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(final Message msg) {
final Object messageString = msg.obj;
runOnUiThread(new Runnable() {
@Override
public void run() {
tv01.setText(((Data)messageString).getMessage());
}
});
}
};
Looper.loop();
}
}
这不起作用:
public void handleMessage(final Message msg) {
runOnUiThread(new Runnable() {
@Override
public void run() {
tv01.setText(((Data)msg.obj).getMessage());
}
});
}