Observer:觀察者模式中的“觀察者”,可接收Observable發送的數據;
subscribe:訂閱,觀察者與被觀察者,通過subscribe()方法進行訂閱;
Subscriber:也是一種觀察者,在2.0中 它與Observer沒什麼實質的區別,不同的是 Subscriber要與Flowable(也是一種被觀察者)聯合使用,該部分內容是2.0新增的
2.關係:
3.使用:
RxJava用法多種多樣,其多樣性體現在Obserable(被觀察者)的創建上。
case R.id.button: //基礎方式 Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() { @Override public void subscribe(ObservableEmitter<String> e) throws Exception { //執行一些其他操作 //............. //執行完畢,觸發回調,通知觀察者 e.onNext("我來發射數據"); e.onComplete(); } }); observable.subscribe(observer); break; case R.id.button2: //just()方式 //直接發送到next() Observable<String> observable1 = Observable.just("Hello"); observable1.subscribe(observer); break; case R.id.button3: //fromIterable()方式 //發送集合到next() List<String> list = new ArrayList<String>(); for (int i = 0; i < 10; i++) { list.add("Hello" + i); } Observable<String> observable2 = Observable.fromIterable((Iterable<String>) list); observable2.subscribe(observer); break; case R.id.button4: //defer()方式 //當觀察者訂閱時,才創建Observable,並且針對每個觀察者創建都是一個新的Observable。 // 以何種方式創建這個Observable對象,當滿足回調條件後,就會進行相應的回調。 Observable<String> observable3 = Observable.defer(new Callable<ObservableSource<? extends String>>() { @Override public ObservableSource<? extends String> call() throws Exception { return Observable.just("hello"); } }); observable3.subscribe(observer); break; case R.id.button5: //定時發送 Observable<Long> observable4 = Observable.interval(2, TimeUnit.SECONDS); observable4.safeSubscribe(observer1); break; default: case R.id.button6: //timer( )方式 //延時發送 Observable<Long> observable5 = Observable.timer(2, TimeUnit.SECONDS); observable5.safeSubscribe(observer1); break;
observer = new Observer<String>() { @Override public void onSubscribe(Disposable d) { } @Override //觀察者接收到通知,進行相關操作 public void onNext(String aLong) { System.out.println("我接收到數據了"); } @Override public void onError(Throwable e) { } @Override public void onComplete() { System.out.println("序列結束"); } }; observer1 = new Observer<Long>() { @Override public void onSubscribe(Disposable d) { } @Override //觀察者接收到通知,進行相關操作 public void onNext(Long aLong) { System.out.println("我接收到數據了" + aLong); } @Override public void onError(Throwable e) { } @Override public void onComplete() { System.out.println("序列結束"); } };