在线程中断循环器

时间:2012-09-05 12:16:57

标签: android multithreading

嗨,我有一个带有此代码的线程

private final class Consumer extends Thread {

    public boolean running;

    public Handler consumerHandler;

    public void run() {
        Looper.prepare();
        consumerHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                Log.i(LOG_TAG, "Consumer-> " + msg.obj);
            }
        };
        Looper.loop();

    }

}

我的活动创建了一个类型为Consumer的线程T,并在其上调用start。 活动如何阻止线程T?

3 个答案:

答案 0 :(得分:2)

运行消息循环通常不会退出循环,除非抛出异常或者您调用quit()方法。看看DOC - Be sure to call quit() to end the loop

    @Override
    protected void onDestroy() {
      consumerObj.consumerHandler.quit(); 
      super.onDestroy();
    }

答案 1 :(得分:1)

上面的一条评论说Looper没有检查isInterrupted()。我试图通过调用Thread.interrupt()并将其添加到循环中来说服我:

        if (isInterrupted()) {
            socket.close();
            Looper.myLooper().quit();
        } else {
            Looper.loop();
        } 
        //some exit code.

我还调用myHandler.sendEmptyMessage(0)来执行一个循环并捕获interrupt,但没有运行退出代码的迹象。在调试时,Message甚至没有到达队列; 我不确定是否兴奋。

答案 2 :(得分:0)

试试这个

if(Consumer != null) {
   Thread thread = Consumer;
   Consumer = null;
   thread.interrupt();
}

或有条件

public void run() {
   while(running) {

   }
}

停止线程集running = false;

参考here