Сбой приложения сразу после запуска сервиса через ContextCompat.startForegroundService () - PullRequest
0 голосов
/ 06 октября 2018

Мое приложение на данный момент все еще нацелено на SDK 25. Я пытаюсь заменить фоновые службы, чтобы иметь возможность нацеливать на SDK 26. Теперь я запускаю IntentService с

ContextCompat.startForegroundService()
* 1003.* Если я правильно понимаю документацию, у меня есть 5 секунд для вызова startForeground () службы.

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

AndroidRuntime: FATAL EXCEPTION: 
Process: com.myAPPPackage, PID: 3855
android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground()
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1768)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6494)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

Как насчет5 секунд задержки в этом случае?Я вижу, что метод onDestroy () службы вызывается через несколько мс после вызова ContextCompat.startForegroundService ()

Есть идеи, почему приложение так падает?

1 Ответ

0 голосов
/ 06 октября 2018

Есть идеи, почему приложение так падает?

Вы не звоните startForeground().

Но иногда мой сервис не имеетлюбая работа, которую нужно выполнить, поэтому она просто сразу выходит

Сначала вам нужно позвонить startForeground().

Или иметь то, что вызывает startForegroundService() определить, есть лилюбую работу, которую нужно выполнить в первую очередь, прежде чем позвонить startForegroundService().Таким образом, вам не нужно беспокоиться о вызове startForegroundService(), если нет необходимости в обслуживании переднего плана.

Если я правильно понимаю документацию, у меня есть 5 секунд для вызова startForeground () наservice.

Да, но это не значит, что вы можете пропустить , позвонив startForeground().Вы должны позвонить startForeground().У вас просто есть пять секунд, чтобы сделать это.Я предполагаю, что это чтобы избежать злоупотреблений для startForegroundService().

...