我有一个boolean observable(通过观察者)启动和停止Android服务。当传递true时,服务必须立即启动。当错误通过时,我想在不久之后出现错误的情况下去辩论,以避免不必要的(和破坏性的)停止和启动服务。是否有可以执行此操作的标准运算符组合,或者我必须自己编写,如果是,我应该基于OperatorDebounceWithTime.java
还是更简单的方法?谢谢!
答案 0 :(得分:6)
您似乎希望debounce(Func1)的版本允许您为每个发出的项目定义自定义去抖窗口。它需要一个函数,为源Observable发出的每个项返回一个Observable。如果源Observable在新生成的Observable终止之前发出另一个项目,则debounce将禁止该项目。
例如,以下代码将立即发出true
个值,并在发出之前保持false
值2秒。如果源在计时器到期之前发出另一个true
值,则false
将被禁止。
deviceTrigger
.distinctUntilChanged()
.debounce(startDevice -> startDevice
? Observable.empty()
: Observable.timer(2, TimeUnit.SECONDS))
.distinctUntilChanged();
请注意,distinctUntilChanged()
调用可能不是必需的,具体取决于您的源Observable是否已经是不同的,并且您的使用者连续处理多个true
值。