我有一个复杂的类系统,有许多类试图更新 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 Looper 的引用的 UI 线程队列?如何在不将某些对象传递给后台线程的情况下更新 UI 线程?