My Android-приложение запускает службу в обратном вызове onCreate() класса, который расширяет Application. Служба выполняет некоторые фоновые задачи, которые относятся к пользователю только во время работы приложения. По этой причине я хотел бы закрыть службу, когда последняя активность приложения закрыта. Я попытался выполнить закрытие службы в обратном вызове onTerminate(), но он никогда не вызывается. Итак, каково было бы лучшее место, где служба должна быть закрыта?
Спасибо!
Служба Android, после ее запуска, будет продолжать работать до тех пор, пока не вызывается Context.stopService() или stopSelf().
Существуют различные крючки, которые вы можете использовать для остановки службы, используя Context.stopService(сама служба или обратный вызов onDestroy()/onPause в одном из действий или нажатие кнопки).
Правда, Android делает некоторое управление ресурсами, но может потребоваться много времени, прежде чем Android решит прекратить ваши услуги. И служба, которая работает, но ничего не делает, просто потребляет ресурсы на телефоне, которые могут понадобиться другим приложениям.
В вашем случае метод onPause вашего последнего действия будет хорошим, который вызывается, и как таковое является правильным местом для остановки службы.
Обратный вызов onPause() будет выполняться, когда ваша деятельность приостановлена по какой-либо причине, и вы знаете, что когда это произойдет, ваше приложение не будет отображаться снова до тех пор, пока не вызывается onResume(). Если у вашей службы есть причина для запуска в прецеденте, что ваша деятельность может быть запущена в ближайшее время, вы должны добавить запись в свою службу, которую вызовы onPause() устанавливают для отсрочки завершения службы. В onResume() вы можете отменить это отсроченное завершение через другую запись.