我在服务中有一个线程,它监听处理程序的指令并将byte []命令写入蓝牙流:
class BToutgoingThread extends Thread
{
private static final String INNER_TAG = "BToutgoingThread";
public void run()
{
Log.e("Service: BToutgoingThread","Starting");
this.setName(INNER_TAG);
Looper.prepare();
mMyServiceHandler = new Handler()
{
public void handleMessage(Message msg)
{
// handle messages...
switch(msg.what)
{
case 1: // some message
write(reset);
break;
case 2: // some other message
write(motReset);
break;
}
}
};
Log.e("outgoing thread","active");
if(stopOutgoing){ // this is set true in Service onDestroy()
Log.e("Service: BToutgoingThread","TERMINATED");
for(int i = 0; i < 15; i++){
mMyServiceHandler.removeMessages(i); // remove messages
}
mMyServiceHandler.getLooper().quit(); // end the looper
return;
}
Looper.loop();
}
public void write(byte[] bytes) {
try {
for (int i = 0; i < 20; i++) // 20 rounds, rapid, FIRE!
{
mmOutStream.write(bytes); // bang
}
} catch (IOException e) { }
}
}
它完美无缺,直到我尝试停止线程。我设置stopOutgoing为true,但这没有做任何事情。我已经尝试将return;
作为一个由Handler执行的命令,但这同样没用。
我也不明白为什么Looper似乎没有循环。我应该垃圾邮件LogCat并创建无限的新处理程序,但这不会发生。
我想理解为什么Looper按照它的方式工作,但是在这一点上我决定采用一种技术来结束线程。任何帮助,将不胜感激。