如果在某个时间段内在RxJava上排名第二则如何跳过第一项

问题描述 投票:0回答:1

我需要在收到事件后的X秒内执行一些操作(代表任何数据项rxJava)。但是,如果在X秒结束之前发生了另一个事件,则需要在X秒内再次执行计时器重置和操作。

换句话说,我们具有用户可以与之交互的UI元素。 X秒钟用户不使用此UI元素后,我们需要执行一些操作。简单的解决方案可能看起来像:

Disposable disp;
void init() {
             final Flowable<Boolean> flowable = 
mapDragOrZoomSubject.delay(TIME_X, TimeUnit.SECONDS)
                    .toFlowable(BackpressureStrategy.DROP);
        disp = flowable. ...subscribeWith(ACTION);  // <-- action in X seconds of inactivity
    }

void gotNewUserInteraction() {
    disp.dispose();
    init();
}

如何在不基于某些rxJava运算符进行处理和重新创建Flowable的情况下执行此操作?

rx-java rx-java2
1个回答
0
投票

我对rxJava不太熟悉,但是您正在寻找的运算符可能是debounce。所以也许是这样的:

Disposable disp;
void init() {
             final Flowable<Boolean> flowable = 
mapDragOrZoomSubject.delay(TIME_X, TimeUnit.SECONDS)
                    .toFlowable(BackpressureStrategy.DROP);
        disp = flowable
                 ...
                 .debounce(TIME_X, TimeUnit.SECONDS)
                 .subscribeWith(ACTION);  // <-- action in X seconds of inactivity
    }

void gotNewUserInteraction() {
    disp.dispose();
    init();
}
© www.soinside.com 2019 - 2024. All rights reserved.