Служба не перезапущена - PullRequest
2 голосов
/ 01 июля 2019

Мы столкнулись с проблемой в Android 8.1 и выше, которую мы не видели раньше, и которая, к сожалению, делает наше приложение менее удобным для наших пользователей. Фоновые липкие сервисы в Android 8.1 и выше не перезапускаются, когда пользователь убирает приложение.

В Android 8.0 и ниже есть большие обещания, что сервисы всегда будут доступны в фоновом режиме, особенно для сервисов, которые реализованы как «липкие сервисы».

Подводя итог, можно сказать, что незакрепленные сервисы не запускаются повторно во время уничтожения в списке недавних приложений. Для закрепленных сервисов (хост приложения вместе с сервисом) приложение перезапускается вскоре после уничтожения. А приложения служб переднего плана на самом деле никогда не убиваются, даже во время быстрого удара.

Это работает как задумано и прекрасно работает в Android 8.0 и более ранних версиях. Таким образом, после удара уничтожения процесс приложения воссоздается в течение короткого времени, а затем вызываются onCreate и onStartCommand, снова полностью запуская службу.

Но в Android 8.1 вызов onStartCommand опущен. Поэтому вместо получения OnCreate и OnStartCommand мы получаем OnCreate и OnDestroy. Это фактически не делает сервис снова активным. Излишне говорить, что мы не можем вручную запустить наш собственный сервис в onCreate.

Я думаю, что следующая статья показывает довольно четкие различия (и с функциональным кодом) между нелипкими сервисами, липкими сервисами и сервисами переднего плана.

В Android 8.1 и выше вызов onStartCommand опущен (и, следовательно, служба не перезапускается). Поэтому вместо получения OnCreate и OnStartCommand мы получаем OnCreate и OnDestroy во время повторного создания приложения.

Кроме того, мы не хотели бы, чтобы в верхней части постоянно отображался значок приложения (как при использовании службы setForeground), а просто позволяли ему работать в фоновом режиме, не беспокоя пользователя.

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Не оптимизировать батарею может работать ваш сервис для правильной работы Вы также можете использовать AlarmManager для перезапуска службы через фиксированное время

это может помочь нажмите

0 голосов
/ 01 июля 2019

с Android 8 не следует запускать службу в фоновом режиме, вы должны запустить службу в качестве переднего плана.

мое предложение с использованием Android WorkManager поддерживается Google ссылка

workManager - стабильная и надежная библиотека для работы с сервисом и планировщиком задач

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