并不总是调用句柄消息

时间:2013-12-26 20:48:30

标签: android usb android-handler

我有一个问题似乎在70%的时间内仍然存在 - 我的USB Thread的处理程序没有在looper中调用。

在run()中我有

//Sends messages to usb accessory
Looper.prepare();
controlSender = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        try{
            Log.d("USB Thread", "Writing out to USB filestream");
            output.write((byte[])msg.obj);
        }catch(final Exception e){
            Log.d("USB Thread", "Writing to USB filestream failed");
            e.printStackTrace();
            UIHandler.post(new Runnable() {
                @Override
                public void run() {
                    onNotify("USB Send Failed " + e.toString() + "\n");
                }
            });
        }
    }
};
Looper.loop();

当此问题发生时,都不会调用Log,并且此线程上也收到消息(可能是个问题?)。只要配件已连接,就会调用this.start();,并且只要它已断开连接,我就会调用constrolSender.getLooper().quit();

1 个答案:

答案 0 :(得分:2)

一个线程只能在Java中启动一次,并且没有时间保证何时实际启动它。如果您尝试在线程启动之前向其发布消息,则Looper开始循环,然后将丢弃该消息。在需要发布消息之前,请尝试启动线程,以确保它按时启动。