仅对布尔可观察值中的假值进行去抖动
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
值。
我有一个布尔值可观察对象(通过观察者)启动和停止 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
值。