Part2:Volley请求失败的重试机制

  • Volley资源加载失败时的重试机制非常简单,放在Part2是因为不搞懂可能会影响后面的逻辑,所以简单看看代码,对着注释理解了即可

    强调,看这一系列文章时手头一定要有完整的Volley源代码,可以对着理解,因为我写上的只是一部分

  • RetryPolicy是一个接口,DefaultRetryPolicy是他的唯一实现类,重试机制启动的入口在BasicNetwork类中(进行网络操作的类),它会判断各种异常,选择相应的异常去进行重试

    private void attemptRetryOnException(String logPrefix, Request<?> request,VolleyError exception) throws VolleyError{
    //一个request绑定了一个RetryPolicy
        RetryPolicy retryPolicy = request.getRetryPolicy();
        int oldTimeout = request.getTimeoutMs();

        retryPolicy.retry(exception);
        Log.e("Volley", String.format("%s-retry [timeout=%s]", logPrefix, oldTimeout));
    }
  • 进去看一下核心的retry函数(其实非常简单)
    @Override
    public void retry(VolleyError error) throws VolleyError {
        //记录已经重试的次数
        mCurrentRetryCount++;
        //mBackoffMtiplier一个乘法因子,扩展的倍数
        mCurrentTimeoutMs += (mCurrentTimeoutMs * mBackoffMultiplier);
        if (!hasAttemptRemaining()) {
            throw error;
        }
    }
    protected boolean hasAttemptRemaining() {
        return mCurrentRetryCount <= mMaxNumRetries;
    }
  • 修改了mCurrentTimeoutMS之后,在进行网络请求拿超时时间时就会拿到改变后的value了.
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值