我需要在收到事件(表示任何数据项rxJava)后的X秒内执行一些操作。但如果在X秒结束之前获得另一个事件,则需要在X秒内再次执行计时器重置和操作。
换句话说,我们有用户可以与之交互的UI元素。在用户对此UI元素保持不活动X秒后,我们需要执行一些操作。简单的解决方案可能如下所示:
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操作符的some的情况下做到这一点?
发布于 2020-04-17 21:11:38
尝试throttleWithTimeout(...)操作符:
@Test
public void testThrottleWithTimeout()
{
    Subject<String> eventSubject = PublishSubject.create();
    TestScheduler scheduler = new TestScheduler();
    TestObserver<String> observer = eventSubject
            .throttleWithTimeout( 1, TimeUnit.SECONDS, scheduler )
            .test();
    eventSubject.onNext( "foo" );
    scheduler.advanceTimeBy( 500, TimeUnit.MILLISECONDS );
    observer.assertNoValues();
    eventSubject.onNext( "bar" );
    scheduler.advanceTimeBy( 500, TimeUnit.MILLISECONDS );
    observer.assertNoValues();
    scheduler.advanceTimeBy( 500, TimeUnit.MILLISECONDS );
    observer.assertValue( "bar" );
}https://stackoverflow.com/questions/61270598
复制相似问题