我们可以将消息传递给UI线程而无需引用UI处理程序吗?

时间:2018-01-05 11:03:04

标签: android multithreading handler android-looper

我有一个复杂的类系统,许多类试图更新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线程?

0 个答案:

没有答案