我有一个问题似乎在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();
。
答案 0 :(得分:2)
一个线程只能在Java中启动一次,并且没有时间保证何时实际启动它。如果您尝试在线程启动之前向其发布消息,则Looper开始循环,然后将丢弃该消息。在需要发布消息之前,请尝试启动线程,以确保它按时启动。