Служба Foreground START_STICKY не перезапускается после остановки в условиях нехватки памяти - PullRequest
0 голосов
/ 12 ноября 2018

Я знаю, что есть тоны с похожим названием, но никто из них не дает однозначного ответа. В настоящее время мы проводим стресс-тестирование службы переднего плана нашего приложения, заполняя ОЗУ ненужным другим приложением и изучая, что происходит с нашим приложением и его службой переднего плана.

Итак, наша служба переднего плана запущена, и пользователю показывается уведомление, и ее режим равен 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 секунд устройство все еще будет в стрессовой ситуации с памятью, и приложение не будет запущено. Это означает, что в случае, если служба не запускается в перенесенное время, повторного планирования не будет, и служба никогда не будет перезапущена. Но, если в перенесенное время устройство находилось в нормальных стрессовых условиях, не связанных с памятью, перезагрузка произойдет успешно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...