所以我必须从服务器下载一堆图像文件,并且我使用Priority-Job-Queue。到目前为止似乎工作正常,我使用简单的AsyncTask
下载部分。
由于我希望下载图片,无论什么,我只在RetryConstraint.RETRY
回调中添加了shouldReRunOnThrowable()
。我还在android.permission.RECEIVE_BOOT_COMPLETED
Manifest.xml
权限
这是正确/最好的方式,因此如果出现任何问题并且由于错误而无法下载某些图像,作业队列将尝试一次又一次地下载它们,直到作业完成为止完成了成功?
谢谢!
@Override
protected RetryConstraint shouldReRunOnThrowable(@NonNull Throwable throwable, int runCount, int maxRunCount) {
return RetryConstraint.RETRY;
}
答案 0 :(得分:3)
查看source code cancelForDeadline
和getRetryLimit()
约束条件,您应该满足这些约束条件,以便继续重试您的工作。
对于 第一个 , overrideDeadlineToCancelInMs
Params
对象,所以在这种情况下cancelForDeadline
始终是假的。
对于 second ,您必须覆盖作业中的getRetryLimit
方法,例如:
protected int getRetryLimit() {
return Integer.MAX_VALUE;
}
终于 如果您达到了重试限制,您可以再次安排工作:
@Override
protected void onCancel(@CancelReason int cancelReason, @Nullable Throwable throwable) {
if (cancelReason == CancelReason.REACHED_DEADLINE) {
jobManager.addJobInBackground(new FetchImageJob());
}
}
现在对我来说,它似乎会一直运行直到成功。