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 не будет работать.