Вызов 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();
}
Ответы
Ответ 1
stopSelf() вызывается до завершения потока. Что именно происходит?
Поток заканчивается.
Подходит ли Android к вызову stopSelf(), но отложите его до завершения потока?
Нет. Ваш Service
все еще уничтожается в точке вызова stopSelf()
. Вы просто просачиваете поток и объект Service
, по крайней мере, до тех пор, пока поток не завершится.
Возможно, вы захотите перейти на IntentService
, поскольку он объединяет шаблон background-thread-and-stopSelf()
.
Ответ 2
Если вы вызываете stopself() изнутри потока. Вы можете вызвать stopSelf() в любой точке вашего потока всякий раз, когда вы хотите остановить службу. Но даже тогда поток будет продолжать работать. Если вы хотите, чтобы служба остановилась, как только поток завершится, вызовите stopSelf() в последней строке вашего потока.