Я знаю, что есть тоны с похожим названием, но никто из них не дает однозначного ответа.
В настоящее время мы проводим стресс-тестирование службы переднего плана нашего приложения, заполняя ОЗУ ненужным другим приложением и изучая, что происходит с нашим приложением и его службой переднего плана.
Итак, наша служба переднего плана запущена, и пользователю показывается уведомление, и ее режим равен START_STICKY
. Однако, когда мы имитируем экстремальное использование памяти, приложение убивается (что нормально, и мы ничего не можем с этим поделать), но плохо то, что наш сервис переднего плана никогда не перезапускается. Возможно, я что-то путаю с документом START_STICKY, но из документа ниже я могу понять, что система должна гарантировать перезагрузку, не так ли?
Константа для возврата из onStartCommand(Intent, int, int)
: если это
процесс службы прерывается во время ее запуска (после возвращения из
onStartCommand(Intent, int, int)
), затем оставьте его в запущенном состоянии
но не сохраняйте это поставленное намерение. Позже система попытается
пересоздать сервис . Поскольку он находится в запущенном состоянии, он будет
гарантия звонить onStartCommand(Intent, int, int)
после создания
новый экземпляр сервиса; если нет ожидающих команд запуска
доставлен в сервис, он будет вызываться с нулевым умыслом
объект, поэтому вы должны позаботиться, чтобы проверить это.
Приведенный выше документ слишком расплывчатый.
Первый вопрос
- будет ли ВСЕГДА ПЕРЕЗАГРУЗИТЬ услугу? Если нет, то каковы
условия перезапуска службы и каковы
условия, когда он не будет перезапущен?
И второй вопрос
- Что это значит Позже ? Позже когда? Позже в следующем году или как? : D
Подводя итог, мы должны гарантировать, что наша служба переднего плана перезапустит все, что потребуется. Есть идеи?
РЕДАКТИРОВАТЬ 1:
Я немного больше изучил логи logcat. Вот что происходит.
Process com.MY_PACKAGE_ID (pid 1192) has died: prcp FGS
Scheduling restart of crashed service com.MY_PACKAGE_ID/MyForegroundService in 1284608ms
Очевидно, что система убивает приложение и планирует перезапуск. В этом случае это примерно через 21 минуту. В других случаях я бы увидел, что время переназначения составило 10.000 мс или 10 секунд. И через 10 секунд устройство все еще будет в стрессовой ситуации с памятью, и приложение не будет запущено. Это означает, что в случае, если служба не запускается в перенесенное время, повторного планирования не будет, и служба никогда не будет перезапущена. Но, если в перенесенное время устройство находилось в нормальных стрессовых условиях, не связанных с памятью, перезагрузка произойдет успешно.