RxJava的上手过程

1.Observable.subscribe(Subscriber) 的内部实现是这样的(仅核心代码):

public Subscription subscribe(Subscriber subscriber) 
{    

     subscriber.onStart();   
     onSubscribe.call(subscriber);   
     return subscriber;
}

可以看到,subscriber() 做了3件事:

  1. 调用 Subscriber.onStart() 。这个方法是一个可选的准备方法。
  2. 调用 Observable 中的 OnSubscribe.call(Subscriber) 。在这里,事件发送的逻辑开始运行。从这也可以看出,在 RxJava 中,Observable 并不是在创建的时候就立即开始发送事件,而是在它被订阅的时候,即当 subscribe() 方法执行的时候。
  3. 将传入的 Subscriber 作为 Subscription 返回。这是为了方便 unsubscribe().
  4. 创建一个Observable,这可以使用 Observable.create() 方法来做到:
  5. final Observable operationObservable = Observable.create(new Observable.OnSubscribe() {
       @Override
       public void call(Subscriber subscriber) {
    	   subscriber.onNext(longRunningOperation());
    	   subscriber.onCompleted();
       }
    });  
    接下来,当 button 被点击时,我们需要给我们的 Observable 做订阅。我添加了一个新的 button 用 RxJava 版本来处理我们的任务。
  6. startRxOperationButton.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(final View v) {
    	   v.setEnabled(false);
    	   operationObservable.subscribe(new Subscriber() {
    		   @Override
    		   public void onCompleted() {
    			   v.setEnabled(true);
    		   }
    		   @Override
    		   public void onError(Throwable e) {}
    		   @Override
    		   public void onNext(String value) {
    			   Snackbar.make(rootView, value, Snackbar.LENGTH_LONG).show();
    		   }
    	   });
       }
    });  
    备注:在我们的 Observable 去订阅之前,我们的操作是不会被调用的!也就是说当点击按钮,调用subscribe()方法之后,我们的所有方法才会被调用!(数据流开始流动)

你可能感兴趣的:(RxJava的上手过程)