2017-05-29 54 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