StopSelf не останавливает мое обслуживание
Google, я видел эту проблему неоднократно, некоторые из сообщений на этом форуме за последние несколько лет. Я никогда не видел, чтобы кто-то получал прямой ответ.
У меня есть служба переднего плана, которая пытается остановить себя после работы в течение 2 часов, выполнив это. StopSelf(). Я пробовал его, когда он привязывался и когда он несвязался. На AVD и на устройстве.
Это просто не работает. Это ошибка в Android? (работает 2.3.3).
Как служба может остановить себя?
Ответы
Ответ 1
Если вы используете службу переднего плана, вы должны позвонить:
stopForeground(true);
Так же, как вы начинаете с startForeground
.
stopSelf
предназначен для обычных услуг. служба переднего плана является специальной...:)
Кстати, в случае, если ваше приложение должно работать на более старых устройствах, вы должны проверить код совместимости, предлагаемый здесь.
Ответ 2
Единственный способ, которым я нашел, чтобы остановить службу с уверенностью, заключается в использовании:
android.os.Process.killProcess(android.os.Process.myPid());
Такое поведение может быть вызвано использованием рабочих потоков, которые не были завершены при вызове stopSelf
. Если вы используете рабочие потоки, будьте осторожны, как вы это используете, вы можете пропустить память, если вы не очистите ее перед выполнением строки.
Ответ 3
Я столкнулся с аналогичной проблемой. Через мой поиск было обнаружено, что: В другом действии метод onCreate я связываю службу, но не unbind его метод onDestory. После исправления, когда я вызываю stopSelf, тогда служба onDestory способ - звонок. Надеюсь, это поможет вам.
В то же время я нахожу базу из документа Google gover.
Услуга может быть запущена и связана с ней. В таком случае система будет поддерживать работу службы до тех пор, пока она запущена или есть одно или несколько подключений к ней с помощью флага Context.BIND_AUTO_CREATE. Когда ни одна из этих ситуаций не выполняется, вызывается метод onDestroy() службы, и служба фактически прекращается. Вся очистка (остановка нитей, незарегистрированные приемники) должна быть завершена по возвращении из onDestroy().
Ответ 4
Я столкнулся с этой проблемой 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();
}
Ответ 5
У меня была эта проблема и поиск, я нашел эту тему. Моя проблема с приложением заключается в том, что при вызове службы stopSelf() активность переднего плана, которая связывает службу, все еще работает. Thne stopSelf вызывается, но служба не уничтожается, поскольку передняя часть все еще связана. Когда я покидаю активность, нажимая назад или переходя на главный экран, служба уничтожается. Короче говоря, stopSelf не будет работать, если привязана деятельность переднего плана.
Ответ 6
У меня тоже была проблема.
Как мы все знаем, Service
работает в приложении UI Thread
. Итак, пока у вас не будет Thread
, который работает в фоновом режиме в вашей службе, и вы вызываете stopSelf()
, тогда это не сработает. Для этого вам нужно сначала остановить это Thread
, а затем выполнить stopSelf()
.
После остановки всего фона Thread
из вашего метода Service
stopSelf()
определенно будет работать.
Ответ 7
Вы должны вызвать startNotification(), прежде чем пытаться остановить службу переднего плана.
startNotification();
stopForeground(true);
stopSelf();
Ответ 8
stopSelf
может не уничтожить службу, если условия не благоприятны, но вы можете stopService
с помощью контекста приложения. Но убедитесь, что служба не перезапускается, прежде чем вызывать stopService
внутри службы.
stopService(applicationContext, MyService::class.java)
Ответ 9
если вы оба вызывали startService и bindService.you должны отсоединить fist, иначе stopSelf не будет работать.