Подтвердить что ты не робот

Вызов stopSelf() в службе, пока поток запущен

Предположим, у меня есть код в обработчике 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();
 }
4b9b3361

Ответ 1

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

Поток заканчивается.

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

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

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

Ответ 2

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