如何阻止线程运行处理程序?

时间:2014-11-11 10:10:41

标签: java android multithreading handler

我在服务中有一个线程,它监听处理程序的指令并将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按照它的方式工作,但是在这一点上我决定采用一种技术来结束线程。任何帮助,将不胜感激。

0 个答案:

没有答案