安全异常:调用方不再运行。

26

在尝试运行我的 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)

1
请在此处发布您的代码 - nitish29
当调用JobIntentService.enque()服务时发生了崩溃。 - Santhosh
1
请查看此问题,并考虑更新您的问题,包括您的JobService实现。 - CommonsWare
1
看起来这是一个谷歌不愿意帮助解决的问题。请参见https://issuetracker.google.com/issues/63622293。 - StarWind0
@Santhosh 有任何解决方案吗? - Royz
@Santhosh,你找到解决方案了吗? - qkx
1个回答

5
让你的 jobIntentService 扩展 MyJobIntentService。
这将处理多个 dequeueWork 调用到 remoteProcess,即使 remoteProcess 抛出安全异常,也可以弹出已经移除的 work。
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;
    }
}

注意:创建一个名为“android.support.v4.app”的包非常重要,因为GenericWorkItem类位于该包内,以便获得访问权限。

5
GenericWorkItem是一个受保护的类。在扩展JobIntentService时,我无法访问它。 - dasfima
3
同样的问题。这并不是一个完整的回答。 - StarWind0
我假设您还没有创建包名 尝试创建一个包 ---android.support.v4.app--- 然后将文件添加到其中... 您将能够访问GenericWorkItem。 - Bipin
1
是的,我现在明白你的意思了,你是说要创建一个与应用程序中支持库路径匹配的软件包,以便让你访问这些函数。虽然这意味着每次你版本升级支持库时都必须测试此代码。除非没有其他选择,否则我不会采取这种解决方案。 - StarWind0
1
根据问题跟踪器上的评论,例如#120和#121,可能会导致另一个问题 - onHandleWork未被调用... - snachmsm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接