Остановка потока в службе Android - PullRequest
2 голосов
/ 04 сентября 2011

У меня есть поток, работающий в службе ... его метод запуска выглядит примерно так:

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

    ...
}

Я запускаю поток в методе onStartCommand службы и хочувыключите его, когда служба остановится.Теперь, чтобы остановить поток, я устанавливаю переменную finished на true (в методе onDestroy службы).

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

(оказывается, что он отлично работает, когда я отлаживаю программу -> cleanUp будет вызываться, как и ожидалось)

Без отладки, cleanUp won 'Т быть названным.Кто-нибудь может мне это объяснить?Где моя ошибка?Спасибо

1 Ответ

0 голосов
/ 04 сентября 2011

Определенно проблема синхронизации потоков, так как отладчик будет сериализировать вещи для вас, и это работает.

Я бы предложил использовать сигнализацию для решения вашей проблемы.

Один из способов - после установки isFinished = TRUE; сделать wait (int timeout) и запустить цикл (потребительский класс) для notify () ;. Таким образом, даже класс Consumer находится в плохом состоянии, вы все равно выходите из игры после истечения времени ожидания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...