嗨,我有一个带有此代码的线程
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?
答案 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