我在服务中运行了一个Thread ...它的run方法看起来像这样:
class Consumer implements Runnable {
public void run() {
while(!finished){
foo();
}
cleanUp();
}
...
}
我正在服务的onStartCommand
方法中启动线程,我希望在服务停止时将其关闭。现在停止线程我将finished
变量设置为true
(在服务的onDestroy
方法中)。
public void onDestroy() {
...
finished = true;
...
}
(事实证明,当我调试程序时,它的工作正常 - > cleanUp
将按预期调用)
如果不进行调试,将不会调用cleanUp
。任何人都可以向我解释这个吗?哪里是我的错误?感谢
答案 0 :(得分:0)
绝对是一个线程同步问题,因为Debugger会为你序列化一些东西并且它可以工作。
我建议使用信号来解决你的问题。
一种方法是在设置isFinished = TRUE之后;做一个wait(int timeout)并让run loop(consumer class)做notify();.这样即使Consumer类处于错误状态,你仍然会在超时后退出。