rxjava: Posso usar retry () mas com atraso?

Estou usando o rxjava no meu aplicativo Android para lidar com solicitações de rede de forma assíncrona. Agora, gostaria de tentar novamente uma solicitação de rede com falha somente após um certo tempo.

Existe alguma maneira de usar retry () em um Observable, mas tentar novamente somente após um certo atraso?

Existe uma maneira de informar o Observable que está sendo tentado novamente (em vez de tentado pela primeira vez)?

Eu dei uma olhada no debounce () / throttleWithTimeout (), mas eles parecem estar fazendo algo diferente.

Editar:

Acho que encontrei uma maneira de fazê-lo, mas estaria interessado na confirmação de que essa é a maneira correta de fazê-lo ou em outras maneiras melhores.

O que estou fazendo é o seguinte: no método call () do meu Observable.OnSubscribe, antes de chamar o método Subscribers onError (), simplesmente deixo o Thread adormecido pelo tempo desejado. Portanto, para tentar novamente a cada 1000 milissegundos, faço algo assim:

@Override
public void call(Subscriber<? super List<ProductNode>> subscriber) {
    try {
        Log.d(TAG, "trying to load all products with pid: " + pid);
        subscriber.onNext(productClient.getProductNodesForParentId(pid));
        subscriber.onCompleted();
    } catch (Exception e) {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e1) {
            e.printStackTrace();
        }
        subscriber.onError(e);
    }
}

Como esse método está sendo executado em um thread de E / S de qualquer maneira, não bloqueia a interface do usuário. O único problema que vejo é que mesmo o primeiro erro é relatado com atraso, portanto o atraso existe mesmo que não haja nova tentativa (). Eu gostaria que o atraso não fosse aplicadodepois de um erro, mas em vez dissoantes uma nova tentativa (mas não antes da primeira tentativa, obviamente).

questionAnswers(12)

yourAnswerToTheQuestion