I wish to implement a HttpRequestRetryHandler for a HttpClient in case the request fails first time.
I also wish to implement Exponential backoff for subsequent retries. Mathematically it can be implemented as
but I am struggling for quite some time now to implement it in the code with HttpRequestRetryHandler.
HttpRequestRetryHandler doesn't allow you that level of control; if you want to do something very specific like that, I'd recommend implementing something like a Handler where you can post Runnables to be executed with a delay, using for example Handler.postDelayed() with increasing delays as per your formula.
I use guava-retrying for a strategy of retrying arbitrary function call.
I integrate it with a library Guavaberry that I wrote and that contains several waiting strategies that allow to easily build a solid exponential backoff combined with random interval (aka jitter) : ExponentialJitterWaitStrategy
For instance for building an exponential backoff capped to 15 seconds and with jitter of 50% on a callable:
The library is well tested and documented and can be easily integrated via Maven Central.
I hope that can be of help.
Here is a good framework with backoff algorithms - https://github.com/rholder/guava-retrying