Volley请求重试策略不考虑超时问题。

10

我已经在下面的DefaultRetryPolicy中将initialTimeoutMs设置为1500,但它并没有考虑到超时:

request.setRetryPolicy(new DefaultRetryPolicy(1500
        , DefaultRetryPolicy.DEFAULT_MAX_RETRIES
        , DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

为了测试设备的超时功能,我断开了它的WiFi,并在Logcat中看到了以下时间:

2019-12-16 14:28:15.892 I/MyClass: request sent
2019-12-16 14:28:35.930 I/MyClass: request caught onError

我原本期望在1.5秒内捕获到onResponse或onError,但实际上却花费了超过20秒的时间!!!


我相信在退避后有一个重试逻辑。因此,请求被发送后,1.5秒后超时,然后在一些随机时间后重试。总的来说,重试次数是DefaultRetryPolicy.DEFAULT_MAX_RETRIES。 - Abhishek Ranjan
您的max_tries和backoff_multiplies的值是多少? - Karan Khurana
它们两个都有默认值。在DefaultRetryPolicy.java中: public static final int DEFAULT_MAX_RETRIES = 1; public static final float DEFAULT_BACKOFF_MULT = 1f; - Alireza Noorali
2个回答

3

0

使用5秒,因为15秒太长了,会导致超时。

int TIME_OUT = 500; //use 5 sec it will work fine with it..

request.setRetryPolicy(new DefaultRetryPolicy(
    TIME_OUT, 
    DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
    DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接