StopSelf не останавливает мое обслуживание

Гуглинг, я видел эту проблему неоднократно, некоторые из сообщений на этом форуме за последние несколько лет. Я никогда не видел, чтобы кто-то получал прямой ответ.

У меня есть служба переднего плана, которая пытается остановить себя после работы в течение 2 часов, выполнив это. StopSelf (). Я пробовал это, когда он привязан и когда он несвязан. На AVD и на устройстве.

Это просто не работает. Это ошибка в Android? (Работает 2.3.3).

Как служба может остановить себя?

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

stopForeground(true);

Так же, как вы начинаете с startForeground .

stopSelf предназначен для использования в обычных сервисах. Передняя часть – специальная … 🙂

Кстати, если ваше приложение должно работать на более старых устройствах, вы должны проверить код совместимости, предлагаемый здесь .

Я тоже столкнулся с этим. Единственный способ, который я нашел, чтобы остановить службу с уверенностью, – это использовать:

 android.os.Process.killProcess(android.os.Process.myPid()); 

Такое поведение может быть вызвано использованием рабочих потоков, которые не были завершены при stopSelf . Если вы используете рабочие потоки, будьте осторожны с тем, как вы это используете – вы можете пропустить память, если вы не очистите ее до выполнения строки.

Я столкнулся с аналогичной проблемой. Через мой поиск было обнаружено, что: В методе onCreate другого действия я связываю службу, но не отключаю ее на метод onDestory. После исправления, когда я вызываю stopSelf, метод onDestory службы является вызовом. Надеюсь, это может вам помочь.

В то же время я нахожу базу из документа Google gover.

Услуга может быть запущена и связана с ней. В таком случае система будет поддерживать работу службы до тех пор, пока она запущена или есть одно или несколько подключений к ней с помощью флага Context.BIND_AUTO_CREATE. Когда ни одна из этих ситуаций не выполняется, вызывается метод onDestroy () службы, и служба фактически прекращается. Вся очистка (остановка нитей, незарегистрированные приемники) должна быть завершена по возвращении из onDestroy ().

Я столкнулся с этой проблемой selfStop() которая тоже не работает.

Основная идея понять, что служба НЕ остановится,

Если работающий цикл все еще работает (в while(mDoWhile) ).

Или любой другой вопрос, который необходимо сначала уничтожить / незарегистрировать.

Поэтому, чтобы заставить stopSelf() или stopService(intent) работать,

onDestroy() рамках вашего сервиса:

 @Override public void onDestroy() { // Unregistered or disconnect what you need to // For example: mGoogleApiClient.disconnect(); // Or break the while loop condition // mDoWhile = false; super.onDestroy(); } 

У меня была эта проблема и поиск, я нашел эту тему. Проблема моего приложения заключается в том, что когда служба вызывает stopSelf (), активность переднего плана, которая связывает службу, все еще работает. Thne stopSelf вызывается, но служба не уничтожается, поскольку передняя часть все еще связана. Когда я покидаю активность, нажимая назад или переходя на главный экран, служба уничтожается. Короче говоря, stopSelf не будет работать, если привязана деятельность переднего плана.

Я тоже столкнулся с такой же проблемой.

Как мы все знаем, Service работает в потоке UI Thread приложения. Итак, пока у вас не будет Thread который работает в фоновом режиме в вашем сервисе, и вы вызываете stopSelf() тогда это не сработает. Для этого сначала нужно остановить этот stopSelf() а затем выполнить stopSelf() .

После остановки всего фона Thread из вашего Service stopSelf() определенно будет работать.