Android 9 (!) IllegalStateException startService из приложения Foreground (!) - PullRequest
0 голосов
/ 19 января 2020

Я расследую несколько исключений IllegalStateException только на Android 9 устройствах, которые я не могу воспроизвести. Сначала я подумал, что это зависит от ограничения запуска служб в фоновом режиме, но сначала они были введены в Android 8, и я не получаю эти исключения в Android 8, а во-вторых, трассировка стека показывает, что служба была запущена из onCreate, поэтому она была в передний план, не так ли?

Полная трассировка стека:

java.lang.RuntimeException: 
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3430)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3614)
at android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:86)
at android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2199)
at android.os.Handler.dispatchMessage (Handler.java:112)
at android.os.Looper.loop (Looper.java:216)
at android.app.ActivityThread.main (ActivityThread.java:7625)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:987)

caused by java.lang.IllegalStateException:

at android.app.ContextImpl.startServiceCommon (ContextImpl.java:1810)
at android.app.ContextImpl.startService (ContextImpl.java:1765)
at android.content.ContextWrapper.startService (ContextWrapper.java:664)
at com.max.power.ServiceManager.doStartService (ServiceManager.java:121)
at com.max.power.ServiceManager.start (ServiceManager.java:82)
at com.max.power.ActivityLogin.setupSocketService (ActivityLogin.java:259)
at com.max.power.ActivityLogin.onCreate (ActivityLogin.java:156)
at android.app.Activity.performCreate (Activity.java:7458)
at android.app.Activity.performCreate (Activity.java:7448)
at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1286)
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3409)

Строка doStartService (ServiceManager. java: 121):

mActivity.startService(new Intent(mActivity, mServiceClass));

Может кто-нибудь представить что там происходит?

Любая помощь будет высоко ценится. Спасибо!

1 Ответ

1 голос
/ 19 января 2020
  Intent serviceIntent = new Intent(context,Service.class);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                startForegroundService(serviceIntent);
            }
            else
            {
                startService(serviceIntent);
            }

"Если ваше приложение предназначено для уровня API 26 или выше, система налагает ограничения на использование или создание фоновых служб, если само приложение не находится на переднем плане. Если приложение должно создать службу переднего плана, приложение должно вызвать startForegroundService (). Этот метод создает фоновую службу, но метод сообщает системе, что служба будет продвигать себя на передний план. Как только служба создана, служба должна вызвать ее метод startForeground () в течение пяти секунд. "

{ ссылка } отвечает, почему он работает на Oreo

...