2017-05-29 55 views
1

可觀察到最近,我一直在努力RxJava 2,我已經測試了Observable.interval()停止從環

subscription = Observable.interval(1, TimeUnit.MILLISECONDS, Schedulers.io()).observeOn(AndroidSchedulers.mainThread()); 

subscription.subscribe(new Observer<Long>() { 
      @Override 
      public void onSubscribe(Disposable d) { 

      } 

      @Override 
      public void onNext(Long aLong) { 
       //binding.appBar.mainContent.msg.setText(aLong+""); 
      } 

      @Override 
      public void onError(Throwable e) { 

      } 

      @Override 
      public void onComplete() { 

      } 
     }); 

可觀測活動後的onCreate方法開始。我通過onNext()方法記錄輸出。我有一個停止按鈕。當它被觸發時,我想停止訂閱流程。

即使點擊了停止按鈕,日誌仍然繼續。

stop.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (subscription != null) { 
        subscription.unsubscribeOn(Schedulers.io()); 
       } 
      } 
     }); 
+0

讀的調用方法中的Javadoc將幫助不少。 –

回答

2

您已經訂閱與Observer,這意味着你必須從onSubscribe(Disposable)回調保持實際Disposable參考,並隨後對該對象執行Disposable#dispose()

 


    private Disposable disposable; 

    ... 

    Observable.interval(1, TimeUnit.MILLISECONDS, Schedulers.io()) 
     .observeOn(AndroidSchedulers.mainThread()) 
     .subscribe(
      new Observer() { 
       @Override public void onSubscribe(Disposable d) { 
       disposable = d; 
       } 

      // other callbacks here 

      }); 

    disposable.dispose(); 

 

相反,你可以訂閱更改爲以下幾點:

 


    Disposable disposable = Observable.interval(1, TimeUnit.MILLISECONDS, Schedulers.io()) 
     .observeOn(AndroidSchedulers.mainThread()) 
     .subscribe(new Consumer() { 
      @Override public void accept(Long aLong) throws Exception { 
      // onNext 
      } 
     }, new Consumer() { 
      @Override public void accept(Throwable throwable) throws Exception { 
      // onError 
      } 
     }, new Action() { 
      @Override public void run() throws Exception { 
      // onComplete 
      } 
     }); 

    disposable.dispose(); 

 
+0

錯誤:(77,33)錯誤:無法找到符號方法unsubscribe() – Raj

+0

@Raj,對不起,錯誤的方法。更新。 – azizbekian

+0

錯誤:(77,33)錯誤:找不到符號方法cancel() – Raj