Android 退避乘数在DefaultRetryPolicy中意味着什么?
我已创建新的作业重试策略:Android 退避乘数在DefaultRetryPolicy中意味着什么?,android,android-volley,Android,Android Volley,我已创建新的作业重试策略: 新的DefaultRetryPolicy(5000,2,2) 那么,在DefaultRetryPolicy中,backoffMultiplier意味着什么?RetryPolicy处理这三个参数 超时-指定每次重试尝试的套接字超时(毫秒) 重试次数-尝试重试的次数 退避乘数-用于确定每次重试尝试时设置为套接字的指数时间的乘数 例如上面的例子 超时-5000秒,尝试次数-2,回退乘数-2 尝试1: 时间=时间+(时间*退避乘数) 时间=5000+10000=15000 套
新的DefaultRetryPolicy(5000,2,2)代码>
那么,在DefaultRetryPolicy
中,backoffMultiplier
意味着什么?RetryPolicy处理这三个参数
超时-指定每次重试尝试的套接字超时(毫秒)
重试次数-尝试重试的次数
退避乘数-用于确定每次重试尝试时设置为套接字的指数时间的乘数
例如上面的例子
超时-5000秒,尝试次数-2,回退乘数-2
尝试1:
时间=时间+(时间*退避乘数)
时间=5000+10000=15000
套接字超时=时间
请求已调度,套接字超时为15秒
尝试2:
时间=时间+(时间*退避乘数)
时间=15000+30000=45000
套接字超时=时间
请求已调度,套接字超时为45秒
因此,在第2次尝试结束时,如果仍然发生套接字超时,则截击将在UI错误响应处理程序中抛出一个TimeoutError。标记的答案将从答案中复制,没有学分:(
下面是代码如何计算它的解释…你可以看看它到底是开源的
初始化时,它使用用户给定的值:
/**
* Constructs a new retry policy.
*
* @param initialTimeoutMs The initial timeout for the policy.
* @param maxNumRetries The maximum number of retries.
* @param backoffMultiplier Backoff multiplier for the policy.
*/
public DefaultRetryPolicy(int initialTimeoutMs, int maxNumRetries, float backoffMultiplier) {
mCurrentTimeoutMs = initialTimeoutMs;
mMaxNumRetries = maxNumRetries;
mBackoffMultiplier = backoffMultiplier;
}
因此,当代码检查当前超时时,它会收到第一个请求的initialTimeoutMs
值(不是重试请求,原始请求)
如果调用了retry()
,则会重新计算超时时间(对于第2次、第3次等重试请求):
因此,仅当第一个请求失败时,在第二个请求(重试请求)中添加退避乘数,以此类推
initialTimeoutMs=5000ms,maxNumRetries=2,BackOff乘数=2
第一个请求超时5s
第二次请求超时(重试)5+10=15s
第三次请求超时(重试)15+30=45秒
因此将有1个正常请求+2次重试。由于代码原因,总共有3个请求
/** Returns true if this policy has attempts remaining, false otherwise. */
protected boolean hasAttemptRemaining() {
return mCurrentRetryCount <= mMaxNumRetries;
}
/**如果此策略仍有尝试,则返回true,否则返回false*/
受保护的布尔值hasAttemptRemaining(){
返回mcurrentrycount“Timeout-5000 secs”,这里5000是毫秒,对吗?是的,超时是5秒,电源是从这里复制/粘贴
/**
* Prepares for the next retry by applying a backoff to the timeout.
*
* @param error The error code of the last attempt.
*/
@Override
public void retry(VolleyError error) throws VolleyError {
mCurrentRetryCount++;
mCurrentTimeoutMs += (int) (mCurrentTimeoutMs * mBackoffMultiplier);
if (!hasAttemptRemaining()) {
throw error;
}
}
/** Returns true if this policy has attempts remaining, false otherwise. */
protected boolean hasAttemptRemaining() {
return mCurrentRetryCount <= mMaxNumRetries;
}