Observable.just("Marry me!").retryWhen(new Func1<Observable<? extends Throwable>, Observable<Long>>() {
@Override public Observable<Long> call(Observable<? extends Throwable> throwableObservable) {
return throwableObservable.zipWith(Observable.range(1, Integer.MAX_VALUE),
new Func2<Throwable, Integer, Integer>() {
@Override public Integer call(Throwable throwable, Integer i) {
return i;
}
}).concatMap(new Func1<Integer, Observable<? extends Long>>() {
@Override public Observable<? extends Long> call(Integer retryCount) {
return Observable.timer((long) Math.pow(2, retryCount), TimeUnit.SECONDS);
}
});
}
}).subscribe(new Subscriber<String>() {
@Override public void onCompleted() {
/*Never completed*/
}
@Override public void onError(Throwable e) {
/*No failure*/
}
@Override public void onNext(String s) {
/*Endless love*/
}
});