Мы столкнулись с проблемой в 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), а просто позволяли ему работать в фоновом режиме, не беспокоя пользователя.