Я использую rxjava в своем Android-приложении для асинхронной обработки сетевых запросов. Теперь я хотел бы повторить неудачный сетевой запрос только через некоторое время.
Можно ли использовать функцию retry() в Observable, но повторить только после некоторой задержки?
Есть ли способ сообщить знанию Observable, что в настоящее время повторно (в отличие от попыток в первый раз)?
Я посмотрел на debounce()/throttleWithTimeout(), но они, похоже, делают что-то другое.
Edit:
Я думаю, что нашел один способ сделать это, но мне было бы интересно подтвердить, что это правильный способ сделать это или для других, лучших способов.
Что я делаю, так это: В методе call() моего Observable.OnSubscribe, прежде чем я вызову метод Subscribers onError(), я просто разрешаю Thread sleep в течение необходимого количества времени. Итак, чтобы повторить каждые 1000 миллисекунд, я делаю что-то вроде этого:
@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);
    }
}
Так как этот метод работает на потоке ввода-вывода, он не блокирует пользовательский интерфейс. Единственная проблема, которую я вижу, заключается в том, что даже первая ошибка сообщается с задержкой, поэтому задержка существует, даже если нет retry(). Я бы хотел, чтобы это было лучше, если задержка не была применена после ошибки, но вместо этого перед повторением (но не до первой попытки, очевидно).