Android Priority-Job-Queue повторять попытки до успеха

Поэтому мне нужно загрузить кучу файлов изображений с сервера, и я использую 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 ответ

Решение

Глядя на исходный код есть cancelForDeadline а также getRetryLimit() ограничения, которые вы должны выполнять, чтобы продолжать повторять свою работу.

Для первого вы просто не overrideDeadlineToCancelInMs за Params объект, так что в этом случае cancelForDeadline всегда ложно.

Для второго вы должны переопределить 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());
    }
}

Теперь для меня это выглядит так, как будто будет работать до успеха.

Другие вопросы по тегам