android - 是否可以使用 android-priority-jobqueue 库保留 Volley API 请求,以及当它返回错误或作业对象转到 onCancel 时?

标签 android android-volley jobs

我创建了一个将调用 API 请求的作业对象。但我并不完全了解 Job 对象的生命周期。

这是我想要发生的事情

  1. 我希望在有 Internet 连接时发送 API 请求,如果没有,它会坚持在有 Internet 连接时发送。
  2. 如果 API 请求因在请求过程中失去互联网连接或发生错误而失败,我希望重新创建并排队。
  3. 我还希望保留作业,并且只有在它返回成功或错误响应的结果时才会从 JobManager 队列中删除。
  4. 无论如何,您如何取消 Job 本身?

这是我的类(class):

public class SampleRequestJob extends Job implements APIRequestListener {
    public static final int PRIORITY = 1;

    int id;

    public SampleRequestJob(Context context, String id) {
        super(new Params(PRIORITY).requireNetwork().persist());
        this.id = id;        
    }

    @Override
    public void onAdded() {
        // TODO : Show progress dialog in notifications
    }

    @Override
    public void onRun() throws Throwable {
        // call API Request
        RequestManager.sampleApiRequest(id).setResultListener(this);
    }

    @Override
    protected void onCancel() {

    }

    @Override
    protected boolean shouldReRunOnThrowable(Throwable throwable) {
        // should it really be false? I don't know the conditions of this method
        return false;
    }

    @Override
    public void OnRequestSuccess(APIRequestType type, JsonNode response) {
        // TODO : Hide progress dialog in notifications
    }

    @Override
    public void OnRequestError(APIRequestType type, VolleyError error) {
        // TODO : Hide progress dialog in notifications, show error in notification panel. 
        // If error is timeout, no connection error, network error, or server error create job and add to jobmanager queue again
    }
}

最佳答案

  1. 使您的“请求”对象可序列化,它会持续存在并在给定参数通过后恢复(连接已恢复)。
  2. 您可以在Job (getRetryLimit) 上定义重试次数。要触发重试,必须在 onRun 中抛出异常。否则,您可以发布/广播和事件到一个组件,该组件将再次重新排队对象。
  3. 作业将在 onRun 成功完成后删除,因此只要确保其中没有抛出异常就足够了。
  4. 看看here .同样,将异常或事件发布到触发器。

希望对您有所帮助。

关于android - 是否可以使用 android-priority-jobqueue 库保留 Volley API 请求,以及当它返回错误或作业对象转到 onCancel 时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32284754/

相关文章:

multithreading - GNU 并行的最佳线程数

Kubernetes - 扩展资源失败,: Job. 批处理无效:

python - 从失败的 rq 作业中获取异常消息

Android 2.3.4 电话管理器

android - 删除带有 header 和参数的请求 Volley

android - 如何使用如下所示的 body 发出 android Volley 请求

java - 如何在 Android 中使用 Volley 发送 Post 请求?

android - fragment 仅在应用程序设计为在手机和平​​板电脑上运行时才有用吗?

java - 安卓卡牌游戏动画

android 在 ListView 中调整图像大小