colymore
colymore

Reputation: 12316

RxJava Debounce method call received

I want to do a simple throttle for a method call, I mean. I have this method:

public void called(int number){
   doSomething(number);
}

This method is called too often, I want to create a observable based on that number received and to debounce the call for doSomething(number).

Is this possible?

Upvotes: 2

Views: 1741

Answers (2)

Maxim Volgin
Maxim Volgin

Reputation: 4077

Sure, like this -

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

subject
  .debounce(1, TimeUnit.SECONDS)
  .subscribe(new Action1<Integer>() {
    public void call(Integer number) {
      doSomething(number);
    }
  });

public void called(int number){
  subject.onNext(number);   
}

Upvotes: 6

Ankit Kumar
Ankit Kumar

Reputation: 3723

private void doSomeWork() {
 getObservable().debounce(500, TimeUnit.MILLISECONDS)
            // Run on a background thread
            .subscribeOn(Schedulers.io())
            // Be notified on the main thread
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(getObserver());
}

 private Observable<Integer> getObservable() {
    return Observable.create(new ObservableOnSubscribe<Integer>() {
        @Override
        public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
            doSomething(number);
        }
    });
}

This might help you

Upvotes: -1

Related Questions