我需要在收到事件(表示任何数据项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
复制相似问题