停止Android服务中的线程

时间:2011-09-03 20:01:54

标签: android multithreading android-service

我在服务中运行了一个Thread ...它的run方法看起来像这样:

class Consumer implements Runnable {
    public void run() {
       while(!finished){
          foo();
       }
       cleanUp();
    }

    ...
}

我正在服务的onStartCommand方法中启动线程,我希望在服务停止时将其关闭。现在停止线程我将finished变量设置为true(在服务的onDestroy方法中)。

    public void onDestroy() {
       ...
       finished = true;
       ...
    }

(事实证明,当我调试程序时,它的工作正常 - > cleanUp将按预期调用)

如果不进行调试,将不会调用cleanUp。任何人都可以向我解释这个吗?哪里是我的错误?感谢

1 个答案:

答案 0 :(得分:0)

绝对是一个线程同步问题,因为Debugger会为你序列化一些东西并且它可以工作。

我建议使用信号来解决你的问题。

一种方法是在设置isFinished = TRUE之后;做一个wait(int timeout)并让run loop(consumer class)做notify();.这样即使Consumer类处于错误状态,你仍然会在超时后退出。