仅在布尔可观察中去抖动错误值

时间:2015-10-06 05:37:28

标签: rx-java

我有一个boolean observable(通过观察者)启动和停止Android服务。当传递true时,服务必须立即启动。当错误通过时,我想在不久之后出现错误的情况下去辩论,以避免不必要的(和破坏性的)停止和启动服务。是否有可以执行此操作的标准运算符组合,或者我必须自己编写,如果是,我应该基于OperatorDebounceWithTime.java还是更简单的方法?谢谢!

1 个答案:

答案 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值。