Android Priority-Job-Queue会一直重试,直到成功为止

时间:2018-01-29 17:21:26

标签: android android-jobscheduler android-priority-jobqueue

所以我必须从服务器下载一堆图像文件,并且我使用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;
}

1 个答案:

答案 0 :(得分:3)

查看source code cancelForDeadlinegetRetryLimit()约束条件,您应该满足这些约束条件,以便继续重试您的工作。

对于 第一个 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());
    }
}

现在对我来说,它似乎会一直运行直到成功。