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了.