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)
让您的 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 类位于该包内以获取访问权限。
| 归档时间: |
|
| 查看次数: |
3926 次 |
| 最近记录: |