Я запускаю службу переднего плана, используя следующий код
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context.startForegroundService(intent);
} else {
context.startService(intent);
}
Это запускает службу переднего плана. В Android Oreo и выше мы должны вызвать startForeground()
течение 5 секунд. Теперь в моем сервисе мы выполняем некоторую обработку, и если определенные условия не выполняются, я не startForeground()
метод startForeground()
. Вместо этого я пытаюсь убить службу.
if (someConditionMet) {
startForeground(notificationId, notification)
} else {
stopSelf()
}
Теперь, если переменная someConditionMet
имеет значение false, мое приложение аварийно завершает работу со следующим журналом сбоев.
2019-04-10 16:57:25.695 19785-19785/com.awesomedroidapps.foregroundactivity E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.awesomedroidapps.foregroundactivity, PID: 19785
android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{e78d43f u0 com.awesomedroidapps.foregroundactivity/.ForegroundServiceTest}
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1835)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6863)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Я не понимаю, что когда я останавливаю службу, тогда зачем вызывать startForeground()
? Есть ли способ остановить службу переднего плана без вызова startForeground()
?
Попробуйте это: используйте статическую переменную и отследите состояние вашего сервиса, то есть работает или не работает, затем проверьте состояние перед вызовом stopself()
. Когда служба запущена, измените логический флаг на true
а когда он остановится, обновите логический флаг на false
.