如何在java中消除一个翻新的被动请求?

我正在开发一个android项目,通过使用Rx-Java observable和subscribe来改造请求。

但是,在一些交互中,这个请求可以被多次调用,我只想在预定义的时间窗口(去抖动)中执行最后一个。

我试图直接将debounce运算符应用于observable,但是它不起作用,因为每次发生某种交互时都会执行下面的代码:

 mApi.getOnlineUsers() .debounce(1, TimeUnit.SECONDS) .subscribe(...) 

我猜应该只创build一个observable,每个交互都应该把执行“追加”到相同的observable。 但是我对Rx Java有点新鲜,不知道该怎么做。

谢谢!

  • 如何从OnClick事件Android创build一个Observable?
  • 将AsyncTask转换为RxAndroid
  • 如何在Android RxJava Observable中按顺序运行2个查询?
  • 如何正确处理RxJava(Android)中的onError?
  • Android Rxjava订阅variables更改
  • IllegalArgumentException:找不到rx.Observable RxJava调用适配器,Retrofit2
  • RxJava单一后台线程调度器
  • RxJava Observable.cache无效
  • 你可以使用一个主题 。

    首先你创build一个发布主题:

     PublishSubject<SomeEvent> subject = PublishSubject.create(); 

    然后,您可以订阅您要接收通知的地方:

     subject .debounce(1, TimeUnit.SECONDS); .subscribe(event -> consumeThis(event)); 

    现在你已经准备好发布这个主题了:

     subject.onNext(mApi.getOnlineUsers()); 

    此外,请注意, debounce操作符会在时间范围内最后一次出现,但throttlefirst首先出现 。 您可能要使用一个或另一个取决于您的使用情况。