Вызов stopSelf () в Сервисе во время работы потока - PullRequest
19 голосов
/ 14 сентября 2010

Предположим, у меня есть код в обработчике onStart () моего Сервиса, чтобы запустить поток для выполнения каких-то задач, а затем вызвать stopSelf ().

stopSelf () вызывается до завершения потока.Что именно происходит?

Я сам проверил это, и мой поток продолжает выполняться, пока не закончится.Слышит ли Android вызов stopSelf (), но отложить его до завершения потока?

 @Override
 public void onStart(Intent intent, int startid) {
  new Thread(new Runnable() {
      public void run() {
        // TODO some long running operation
      }
    }).start();
  stopSelf();
 }

Ответы [ 2 ]

21 голосов
/ 14 сентября 2010

stopSelf () вызывается до завершения потока.Что именно происходит?

Поток запускается до конца.

Слышит ли Android вызов stopSelf (), но отложил его до завершения потока?

Нет.Ваш Service все еще уничтожен в точке вызова stopSelf().Вы просто пропускаете поток и объект Service, по крайней мере, до тех пор, пока поток не завершится.

Возможно, вы захотите переключиться на IntentService, так как он объединяет background-thread-and- stopSelf() шаблон.

1 голос
/ 01 декабря 2011

Если вы вызываете stopself () из потока. Вы можете вызывать stopSelf () в любой точке вашего потока, когда вы хотите, чтобы служба остановилась. Но даже тогда поток продолжит работать. Если вы хотите, чтобы служба остановилась сразу после завершения потока, вызовите stopSelf () в последней строке вашего потока.

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