Будет ли он перезапущен без перезагрузки телефона?
Возможно. Если это действительно так, потому что «система убивает его из-за памяти», и вы возвращаете соответствующее значение из onStartCommand()
(например, START_STICKY
), оно должно быть перезапущено в какой-то момент в будущем. Если служба была убита из-за действий пользователя (например, принудительное отключение на экране «Управление службами» в настройках), она не будет перезапущена.
Какова наилучшая практика, позволяющая избежать как можно большего уничтожения важной службы?
Во-первых, разработайте свое приложение так, чтобы оно не зависело от такого постоянного сервиса. 99,44% приложений Android не нуждаются в сервисе, работающем непрерывно, не говоря уже о сервисе, который начинает это делать во время загрузки. Пользователи устройств Android ненавидят разработчиков, которые считают, что их приложения ооооооооооооооооооченны, потому что у них постоянно работают службы, поэтому у нас есть службы убийц задач, Force Stop и Android из-за старости. Например, если вы проверяете новую электронную почту каждые 15 минут, используйте AlarmManager
и IntentService
, а не службу, которая работает вечно.
Если вы можете продемонстрировать - мне и вашим пользователям - что ваше приложение входит в число 0,56% приложений, которым действительно нужен сервис, который запускается во время загрузки и работает вечно, вы можете использовать startForeground()
. Это будет указывать ОС, что ваш сервис является частью пользовательского интерфейса. Вам нужно будет отобразить Notification
, в идеале, чтобы позволить пользователю аккуратно завершить работу вашей службы, если и когда пользователь перестанет чувствовать, что это оправдано.