1

我正在使用 JobIntentService 来检测来自 Google Activity Transition API 的活动。

在使用 Target SDK 30 (Android 11) 进行更新后,我在所有 Android 平台上的 Crashlytics 中都收到了很多崩溃。它们 99% 发生在后台,我自己无法重现。

Fatal Exception: java.lang.RuntimeException
An error occurred while executing doInBackground()
android.os.AsyncTask$4.done (AsyncTask.java:415)
java.util.concurrent.FutureTask.finishCompletion (FutureTask.java:383)
java.util.concurrent.FutureTask.setException (FutureTask.java:252)
java.util.concurrent.FutureTask.run (FutureTask.java:271)
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
java.lang.Thread.run (Thread.java:923)
Caused by java.lang.IllegalArgumentException
Given work is not active: JobWorkItem{id=1 intent=Intent { flg=0x10 cmp=com.myapp/com.myapp.activity.ActivityRecognitionWorkReceiver (has extras) } dcount=15}
android.app.job.JobParameters.completeWork (JobParameters.java:312)
androidx.core.app.JobIntentService$JobServiceEngineImpl$WrapperWorkItem.complete (JobIntentService.java:272)
androidx.core.app.JobIntentService$CommandProcessor.doInBackground (JobIntentService.java:398)
androidx.core.app.JobIntentService$CommandProcessor.doInBackground (JobIntentService.java:387)
android.os.AsyncTask$3.call (AsyncTask.java:394)
java.util.concurrent.FutureTask.run (FutureTask.java:266)
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
java.lang.Thread.run (Thread.java:923)

为了接收事件,我使用广播接收器,然后我将具有唯一作业 ID 的作业服务排入队列

 fun enqueueWork(context: Context, intent: Intent) {
        JobIntentService.enqueueWork(
            context,
            ActivityTransitionJobService::class.java,
            UNIQUE_JOB_ID,
            intent
            )
        }

我正在使用最新的工作运行时库(截至今天 20.12.2021)

implementation"androidx.work:work-runtime-ktx:2.7.1"

这里的问题是:

  • 我如何识别并希望解决该问题
  • Google Activity Transition API in the Background 还有其他推荐的解决方案吗?官方示例仍在使用 IntentService,但已弃用,替换为 JobIntentService,现在也已弃用。

非常感谢任何帮助

4

0 回答 0