仅对布尔可观察值中的假值进行去抖动

Debounce only false values in boolean observable

我有一个布尔值可观察对象(通过观察者)启动和停止 Android 服务。传递 true 时,服务必须立即启动。当 false 被传递时,我想去抖动它以防 true 很快出现,以避免不必要的(和破坏性的)停止和启动服务。是否有标准运算符的组合可以做到这一点,或者我必须自己编写,如果是这样,我应该基于 OperatorDebounceWithTime.java 还是有更简单的方法?谢谢!

您似乎想要 debounce(Func1) 的版本,它允许您为每个发出的项目定义自定义去抖动 window。它需要一个函数,returns 一个 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 值。