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;
}