SecurityException:调用者不再运行

San*_*osh 16 android job-scheduling android-asynctask jobintentservice

我在尝试运行JobIntentService时面临Android O及以上版本的问题,我很难重现这个问题:

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)
Run Code Online (Sandbox Code Playgroud)

Bip*_*pin 5

让您的 jobIntentService 扩展 MyJobIntentService

这将处理到 remoteProcess 的多个 dequeueWork 调用,即使 remoteProcess 抛出安全异常以将已删除的工作从堆栈中弹出

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:创建包“android.support.v4.app”很重要,因为 GenericWorkItem 类位于该包内以获取访问权限。

  • `GenericWorkItem` 是一个受保护的类。在扩展 JobIntentService 时我无法访问它。 (5认同)
  • 同样的问题。这不是一个完整的答案。 (3认同)