我有一个复杂的类系统,许多类试图更新UI元素,所以我寻找最有效的方法来实现这一点。在我看来,使用处理程序是最好的解决方案(如果你知道更好的方法 - 请分享它)。但是有一些问题。如果我在单独的线程中使用此代码 - 发送的消息似乎丢失(没有任何警告),并且UI处理程序不会调度它们:
Handler handler = new Handler(Looper.getMainLooper());
Message message = handler.obtainMessage();
Parameters p = new Parameters(-1, -1);
p.setObdProtocols(ObdProtocols.values()[protocolPointer]);
message.obj = p;
handler.sendMessage(message);
这是UI处理程序的代码:
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
Log.d("OBD2DEBUGMODE", "MainActivity.handler: handling message: "+msg.what);
Parameters temp = (Parameters) msg.obj;
rpmTxt.setText(""+temp.getRpm());
throtleText.setText(""+temp.getThrotlePosition());
if(temp.getObdProtocols()!=null) {
protoTxt.setText(temp.getObdProtocols().toString());
}
}
};
上面的代码不起作用...为什么我不能只将消息传递给UI线程队列,保持对UI Looper的引用?如何在不将某些对象传递给后台线程的情况下更新UI线程?