Я отправляю сообщение обработчику, который связан с его собственным потоком.В методе handleMessage я пытаюсь обновить пользовательский интерфейс содержимым сообщения, используя runOnUiThread.Это прекрасно работает, если взять параметр obj сообщения из handleMessage и назначить его новой конечной переменной.Но если я не использую это назначение и не принимаю msg.obj непосредственно в runnable, переменная obj будет нулевой, даже если ссылка msg имеет тот же идентификатор при проверке ссылки msg, переданной handleMessage перед вызовом runOnUiThread.
Почему это происходит?
Это работает:
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());
}
});
}