web-dev-qa-db-ja.com

SecurityException:呼び出し元は実行されていません

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)
15
Santhosh

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」を作成することが重要です。

4
Bipin