Служба переднего плана остановила перезапуск себя

У меня есть служба переднего плана, в которой я регистрируюсь для обновлений местоположения, фильтр намерений для намерения батареи Intent.ACTION_BATTERY_CHANGED и файл LocalBroadcast. Все это я удаляю в onDestroy своего сервиса, так как когда-то этот сервис умер.

Я также изменил возвращаемое целое число в onStartCommand с START_STICKY на START_NOT_STICKY, но это не имеет никакого эффекта.

Я регистрирую, когда эта служба запускается и уничтожается, а также мое основное действие, и кажется, что эта служба просто запускается сама по себе без каких-либо действий.

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

Итак, резюмируем.
– Это связанная служба переднего плана.
– Я возвращаю START_NOT_STICKY в onStartCommand
– Когда она мне больше не нужна и закрываю приложение, я отвязываюсь от нее, вызываю stopService и службу onDestroy вызывается, где мы отменяем регистрацию всех получателей. - После этого служба запускается случайным образом.


person StuStirling    schedule 20.02.2015    source источник
comment
Как служба объявляется в манифесте? У вас есть какие-либо фильтры Intent, указанные для службы?   -  person mach    schedule 25.02.2015
comment
Извините, надо было это упомянуть. Нет, у меня нет настройки фильтров намерений в манифесте. Буквально только декларация   -  person StuStirling    schedule 25.02.2015
comment
Код для Сервиса было бы неплохо иметь. Вы пытались зарегистрировать функции onBind() и onNewIntent() в службе, чтобы попытаться определить, запущена ли она из-за привязки к ней активности или это входящее намерение?   -  person mach    schedule 25.02.2015
comment
Я поместил эти журналы прошлой ночью, так что буду ждать, пока это произойдет снова. Я думаю, что это может быть проблема Lollipop, поскольку раньше этого не было, и у меня нет никаких сообщений об этом на других устройствах. Сервис слишком велик для публикации кода   -  person StuStirling    schedule 25.02.2015
comment
Обычно это происходит потому, что где-то есть фоновый поток, который вызывает службу из мертвых. У меня есть такая проблема, и я пытался придумать лучший синхронизированный способ убедиться, что фоновый поток умирает до того, как это сделает служба.   -  person TheRealChx101    schedule 19.07.2019
comment
Что ж, я все еще сталкиваюсь с той же проблемой со службой, что и вы, но не со всеми устройствами, на самом деле это происходит случайным образом.   -  person Bahaa Odeh    schedule 27.04.2020


Ответы (1)


Поскольку вы используете службу переднего плана, вы должны вызвать метод stopForeground «Внимание: целочисленный идентификатор, который вы указываете для startForeground(), не должен быть равен 0».

Есть только два способа запустить службу: либо привязать, либо запустить ее из контекста, вы должны убедиться, что не делаете это внутри своего кода.

Возможно, вам следует проверить жизненный цикл службы: http://developer.android.com/images/service_lifecycle.png

person reinaldomoreira    schedule 28.02.2015
comment
Разве я не должен вызывать stopForeground(), если я останавливаюсь внутри самой службы? - person StuStirling; 03.03.2015