主要在三星设备上的 JobIntentService 上的 IllegalArgumentException
IllegalArgumentException on JobIntentService mainly on Samsung devices
我遇到了很多无法重现的 IllegalArgumentException 崩溃。其中 99% 来自三星 Galaxy 设备。
这是来自 Play 商店控制台的日志:
java.lang.RuntimeException:
at android.os.AsyncTask.done (AsyncTask.java:354)
at java.util.concurrent.FutureTask.finishCompletion (FutureTask.java:383)
at java.util.concurrent.FutureTask.setException (FutureTask.java:252)
at java.util.concurrent.FutureTask.run (FutureTask.java:271)
at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
at java.lang.Thread.run (Thread.java:764)
Caused by: java.lang.IllegalArgumentException:
at android.app.job.JobParameters.completeWork (JobParameters.java:268)
at android.support.v4.app.JobIntentService$JobServiceEngineImpl$WrapperWorkItem.complete (JobIntentService.java:268)
at android.support.v4.app.JobIntentService$CommandProcessor.doInBackground (JobIntentService.java:394)
at android.support.v4.app.JobIntentService$CommandProcessor.doInBackground (JobIntentService.java:383)
at android.os.AsyncTask.call (AsyncTask.java:333)
at java.util.concurrent.FutureTask.run (FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
at java.lang.Thread.run (Thread.java:764)
我有 6 个 JobInentServices,每个更新一个小部件。每个 JobIntentService 都有一个唯一的 5 位数字 JOB_ID,以避免与库中的 JOB_ID 发生任何可能的冲突。
在我上次更新之前,我使用了其他 JOB_ID,因为我怀疑某些 ID 导致了此异常。现在有了新的 ID,这些崩溃的情况就会大大增加。
改变是这个原因吗?该应用程序是否 "remember" 旧 ID,现在同一个 JobIntentService 有 2 个不同的 ID?
为什么这只发生在三星设备上?
可能是这个异常的根源吗?
有什么办法可以解决这个问题吗?
我的小部件提供商代码:
Intent intent = new Intent(context.getApplicationContext(),
WidgetEcoService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds);
WidgetEcoService.enqueueWork(context.getApplicationContext(), intent);
我来自 JobIntentService 的代码:
public static final int JOB_ID = 45454;
public static void enqueueWork(Context context, Intent work) {
enqueueWork(context, WidgetEcoService.class, JOB_ID, work);
}
提前致谢。
根据“The CommonsBlog”:
The docs point out that the id needs to be stable across app updates,
and therefore an id resource is unsuitable
所以答案是我在上次更新中更改JOB_ID是我自己的错误,我现在无能为力。
我遇到了很多无法重现的 IllegalArgumentException 崩溃。其中 99% 来自三星 Galaxy 设备。 这是来自 Play 商店控制台的日志:
java.lang.RuntimeException:
at android.os.AsyncTask.done (AsyncTask.java:354)
at java.util.concurrent.FutureTask.finishCompletion (FutureTask.java:383)
at java.util.concurrent.FutureTask.setException (FutureTask.java:252)
at java.util.concurrent.FutureTask.run (FutureTask.java:271)
at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
at java.lang.Thread.run (Thread.java:764)
Caused by: java.lang.IllegalArgumentException:
at android.app.job.JobParameters.completeWork (JobParameters.java:268)
at android.support.v4.app.JobIntentService$JobServiceEngineImpl$WrapperWorkItem.complete (JobIntentService.java:268)
at android.support.v4.app.JobIntentService$CommandProcessor.doInBackground (JobIntentService.java:394)
at android.support.v4.app.JobIntentService$CommandProcessor.doInBackground (JobIntentService.java:383)
at android.os.AsyncTask.call (AsyncTask.java:333)
at java.util.concurrent.FutureTask.run (FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
at java.lang.Thread.run (Thread.java:764)
我有 6 个 JobInentServices,每个更新一个小部件。每个 JobIntentService 都有一个唯一的 5 位数字 JOB_ID,以避免与库中的 JOB_ID 发生任何可能的冲突。
在我上次更新之前,我使用了其他 JOB_ID,因为我怀疑某些 ID 导致了此异常。现在有了新的 ID,这些崩溃的情况就会大大增加。
改变是这个原因吗?该应用程序是否 "remember" 旧 ID,现在同一个 JobIntentService 有 2 个不同的 ID? 为什么这只发生在三星设备上? 可能是这个异常的根源吗? 有什么办法可以解决这个问题吗?
我的小部件提供商代码:
Intent intent = new Intent(context.getApplicationContext(),
WidgetEcoService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds);
WidgetEcoService.enqueueWork(context.getApplicationContext(), intent);
我来自 JobIntentService 的代码:
public static final int JOB_ID = 45454;
public static void enqueueWork(Context context, Intent work) {
enqueueWork(context, WidgetEcoService.class, JOB_ID, work);
}
提前致谢。
根据“The CommonsBlog”:
The docs point out that the id needs to be stable across app updates,
and therefore an id resource is unsuitable
所以答案是我在上次更新中更改JOB_ID是我自己的错误,我现在无能为力。