如何使用指数退避实现HttpRequestRetryHandler?

Gau*_*wal 6 java android httprequest

我希望在请求第一次失败的情况下为HttpClient 实现HttpRequestRetryHandler.

我还希望为后续重试实施指数退避.在数学上它可以实现为

E(c)= 1/2(2次幂(c)-1)

在此输入图像描述

但是我现在正在努力用HttpRequestRetryHandler在代码中实现它.

Bru*_*ira 4

HttpRequestRetryHandler 不允许您进行这种级别的控制;如果你想做一些非常具体的事情,我建议实现像Handler这样的东西,你可以在其中发布要延迟执行的 Runnables,例如使用 Handler.postDelayed() 并根据你的公式增加延迟。

Handler mHandler = new Handler();
int mDelay = INITIAL_DELAY;

// try request
mHandler.postDelayed(mDelay, new Runnable() {
   public void run() {
      // try your request here; if it fails, then repost:
      if (failed) {
          mDelay *= 2;  // or as per your formula
          mHandler.postDelayed(mDelay, this);
      }
      else {
          // success!
      }
   }
});
Run Code Online (Sandbox Code Playgroud)