Запуск службы при перезагрузке и остановка через действие

#android

#Android

Вопрос:

У меня следующие две ситуации:

  • Действие с кнопками для запуска и остановки службы
  • Если устройство перезапускается, я запускаю ту же службу, используя BroadcastReceiver для отправки намерения при перезагрузке, а затем останавливаю его из-за действия, как в предыдущем случае

Другими словами, если служба запущена в Activity, она должна оставаться активной до тех пор, пока вы нажимаете кнопку stop в этом действии (независимо от перезагрузки).

Итак, я хотел бы знать, как включить остановку службы после перезагрузки?

Ответ №1:

Вы должны просто вызвать stopService, как обычно. Запуск во время загрузки с BroadcastReceiver не делает его особенным.

Комментарии:

1. Итак, что происходит, так это то, что процесс приложения создается для BroadcastReceiver, ему принадлежит запускаемая служба, а также действия, которые я запускаю из пусковой установки, поэтому проблем нет, потому что они принадлежат одному и тому же процессу? Это правильно? Я немного смущен, потому что это выглядит для меня немного иначе, чем при запуске приложения из лаунчера.

2. @точка останова: по Application сути, это одноэлементный элемент. Другими словами, когда создается какой-либо компонент приложения Application , он создается сам по себе и будет оставаться (по крайней мере, в виде скелета) до тех пор, пока явно не будет остановлен пользователем (например, с помощью Настройки -> Приложения) или, в крайних случаях, системой, когда ресурсов действительно мало.

3. @Squonk спасибо и 1. Еще одна вещь: при остановке приложения, если вы нажмете кнопку «Назад» в основном приложении, действие будет остановлено, если у него нет службы рядом или оно состоит только из службы, тогда его нужно остановить через настройки, если нет другого способа сделать это?

4. @ точка останова: использование кнопки «НАЗАД» просто возвращает вас «назад» — на самом деле это не останавливает приложение. Это может просто вернуть вас к предыдущему Activity , если оно не было уничтожено с помощью finish() , или оно может оставить вас в том же Activity состоянии, но просто удалить Fragment и вытащить предыдущее Fragment из заднего стека. Единственный способ по-настоящему остановить приложение — это принудительно закрыть его из-за необработанного исключения, ИЛИ пользователь использует «принудительную остановку» в настройках, ИЛИ перезагрузку устройства, ИЛИ обновление самого приложения.

5. @ точка останова: «Тогда приложение остановлено?» — Нет. Все, что происходит, это то, что вы Activity «закончили». Само «приложение» остается, даже если Service оно не запущено. Причина, по которой Android сохраняет простой экземпляр Application , заключается в том, что он позволяет быстрее и эффективнее запускать его в следующий раз, когда пользователь захочет его использовать.