Работник включен следующим образом: < /p>
Код: Выделить всё
val workRequest = PeriodicWorkRequestBuilder(
repeatInterval = 1L,
repeatIntervalTimeUnit = TimeUnit.HOURS,
)
.setConstraints(NetworkType.CONNECTED)
.addBackoffCriteria(30L)
.build()
WorkManager.getInstance(context)
.enqueueUniquePeriodicWork(
MyWorker.workerUniqueName,
ExistingPeriodicWorkPolicy.KEEP,
workRequest,
)
< P> Я также следую руководящим принципам, описанным в Руководстве Android - поддержку долгосрочных работников. Тип службы переднего плана объявлен DataSync .
Учитывая, что работник начинается с 4G+Wi -Fi, когда WiFi отключен, тогда работник останавливается (с вышеупомянутой повторной задачей < /код> Результат работника). В этом случае, каждый раз, когда система пытается перезагрузить работника (политика повторной попытки), в то время как приложение находится на фоне, у меня есть следующее исключение в устройстве Android 14: < /p>
Moving WorkSpec (...) to the foreground
startForegroundService() not allowed due to mAllowStartForeground false: service com.myapp/androidx.work.impl.foreground.SystemForegroundService
android.app.ForegroundServiceStartNotAllowedException: startForegroundService() not allowed due to mAllowStartForeground false: service com.myapp/androidx.work.impl.foreground.SystemForegroundService
at android.app.ForegroundServiceStartNotAllowedException$1.createFromParcel(ForegroundServiceStartNotAllowedException.java:54)
at android.app.ForegroundServiceStartNotAllowedException$1.createFromParcel(ForegroundServiceStartNotAllowedException.java:50)
at android.os.Parcel.readParcelableInternal(Parcel.java:4870)
at android.os.Parcel.readParcelable(Parcel.java:4852)
at android.os.Parcel.createExceptionOrNull(Parcel.java:3052)
at android.os.Parcel.createException(Parcel.java:3041)
at android.os.Parcel.readException(Parcel.java:3024)
at android.os.Parcel.readException(Parcel.java:2966)
at android.app.IActivityManager$Stub$Proxy.startService(IActivityManager.java:5984)
at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1931)
at android.app.ContextImpl.startForegroundService(ContextImpl.java:1906)
at android.content.ContextWrapper.startForegroundService(ContextWrapper.java:830)
at androidx.core.content.ContextCompat$Api26Impl.startForegroundService(ContextCompat.java:1189)
at androidx.core.content.ContextCompat.startForegroundService(ContextCompat.java:752)
at androidx.work.impl.Processor.startForeground(Processor.java:206)
at androidx.work.impl.utils.WorkForegroundUpdater$1.run(WorkForegroundUpdater.java:100)
at androidx.work.impl.utils.SerialExecutorImpl$Task.run(SerialExecutorImpl.java:96)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
...
Moving WorkSpec (...) to the foreground
Work [ id=..., tags={ ...MyWorker } ] failed because it threw an exception/error
java.util.concurrent.ExecutionException: android.app.BackgroundServiceStartNotAllowedException: Not allowed to start service Intent { act=ACTION_NOTIFY cmp=com.myapp/androidx.work.impl.foreground.SystemForegroundService (has extras) }: app is in background uid UidRecord{... TRNB bg:+2m17s737ms idle change:procadj procs:0 seq(401644,401374)} caps=------
at androidx.work.impl.utils.futures.AbstractFuture.getDoneValue(AbstractFuture.java:515)
at androidx.work.impl.utils.futures.AbstractFuture.get(AbstractFuture.java:474)
at androidx.work.impl.WorkerWrapper$2.run(WorkerWrapper.java:316)
at androidx.work.impl.utils.SerialExecutorImpl$Task.run(SerialExecutorImpl.java:96)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
...
Worker result FAILURE for Work [ id=..., tags={ ...MyWorker } ]
Unable to stop foreground service
android.app.BackgroundServiceStartNotAllowedException: Not allowed to start service Intent { act=ACTION_STOP_FOREGROUND cmp=com.myapp/androidx.work.impl.foreground.SystemForegroundService }: app is in background uid UidRecord{... TRNB bg:+2m17s772ms idle change:procadj procs:0 seq(401644,401374)} caps=------
at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1945)
at android.app.ContextImpl.startService(ContextImpl.java:1900)
at android.content.ContextWrapper.startService(ContextWrapper.java:825)
at androidx.work.impl.Processor.stopForegroundService(Processor.java:403)
at androidx.work.impl.Processor.cleanUpWorkerUnsafe(Processor.java:425)
at androidx.work.impl.Processor.onExecuted(Processor.java:345)
at androidx.work.impl.Processor.lambda$startWork$1$androidx-work-impl-Processor(Processor.java:179)
at androidx.work.impl.Processor$$ExternalSyntheticLambda2.run(D8$$SyntheticClass:0)
...
< /code>
В других случаях я проверил, где работник остановлен и перезапущен, пока приложение было в фоновом режиме, я не получил вышеупомянутое исключение. Вы хоть представляете, почему у меня есть это исключение, в этом случае и только в этом случае? Вы столкнулись с аналогичными проблемами?
Подробнее здесь: https://stackoverflow.com/questions/782 ... ion-for-lo
Мобильная версия