Как остановить службу переднего плана перед вызовом метода startForeground ()?

1

Я запускаю службу переднего плана, используя следующий код

 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()?

Теги:

1 ответ

0

Попробуйте это: используйте статическую переменную и отследите состояние вашего сервиса, то есть работает или не работает, затем проверьте состояние перед вызовом stopself(). Когда служба запущена, измените логический флаг на true а когда он остановится, обновите логический флаг на false.

  • 0
    как это решит сценарий, о котором я говорил?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню