Android O以上でJobIntentServiceを実行しようとすると、以下の問題に直面しています。問題を再現するのに苦労しています:
Caused by Java.lang.SecurityException: Caller no longer running, last stopped +206ms because: timed out while starting
at Android.os.Parcel.readException(Parcel.Java:1942)
at Android.os.Parcel.readException(Parcel.Java:1888)
at Android.app.job.IJobCallback$Stub$Proxy.dequeueWork(IJobCallback.Java:191)
at Android.app.job.JobParameters.dequeueWork(JobParameters.Java:196)
at Android.support.v4.app.JobIntentService$JobServiceEngineImpl.dequeueWork(JobIntentService.Java:314)
at Android.support.v4.app.JobIntentService.dequeueWork(JobIntentService.Java:639)
at Android.support.v4.app.JobIntentService$CommandProcessor.doInBackground(JobIntentService.Java:389)
at Android.support.v4.app.JobIntentService$CommandProcessor.doInBackground(JobIntentService.Java:382)
at Android.os.AsyncTask$2.call(AsyncTask.Java:333)
at Java.util.concurrent.FutureTask.run(FutureTask.Java:266)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1162)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:636)
at Java.lang.Thread.run(Thread.Java:764)
JobIntentServiceでMyJobIntentServiceを拡張します
これは、remoteProcessが既に削除された作業をスタックからポップするためのセキュリティ例外をスローする場合でも、remoteProcessに向かう複数のdequeueWork呼び出しを処理します
package Android.support.v4.app;
import timber.log.Timber;
public abstract class MyJobIntentService extends JobIntentService {
@Override
GenericWorkItem dequeueWork() {
try {
return super.dequeueWork();
} catch (SecurityException ignored) {
Timber.e(ignored);
}
return null;
}
}
注:アクセスを取得するには、GenericWorkItemクラスがこのパッケージ内にあるため、パッケージ「Android.support.v4.app」を作成することが重要です。