-
RxJava已經(jīng)更新到2.x版本,和1.x版本差別有點(diǎn)大信轿,建議直接使用2.x版本
compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.0.5'
-
簡(jiǎn)單使用
-
創(chuàng)建被觀察者
Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() { @Override public void subscribe(ObservableEmitter<String> e) throws Exception { e.onNext("aaa"); e.onNext("ccc"); e.onNext(Thread.currentThread().getName()); e.onComplete(); } });
-
創(chuàng)建觀察者
Observer<String> observer = new Observer<String>() { @Override public void onSubscribe(Disposable d) { Log.e(TAG, "onSubscribe: " + d.toString()); } @Override public void onNext(String s) { Log.e(TAG, "onNext: " + s); } @Override public void onError(Throwable e) { Log.e(TAG, "onError: " + e); } @Override public void onComplete() { Log.e(TAG, "onComplete: " + Thread.currentThread().getName()); } };
-
訂閱事件
observable.subscribe(observer);
-
簡(jiǎn)單的鏈?zhǔn)骄幊?/p>
Observable.create(new ObservableOnSubscribe<String>() { @Override public void subscribe(ObservableEmitter<String> e) throws Exception { e.onNext("haha"); e.onNext("hehe"); e.onComplete(); } }).subscribe(new Observer<String>() { @Override public void onSubscribe(Disposable d) { Log.e(TAG, "onSubscribe: " + d.toString()); } @Override public void onNext(String s) { Log.e(TAG, "onNext: " + s); } @Override public void onError(Throwable e) { Log.e(TAG, "onError: " + e); } @Override public void onComplete() { Log.e(TAG, "onComplete: "); } });
-
-
更換線程
observable.subscribeOn(Schedulers.newThread()) //指定被觀察者的執(zhí)行線程 .observeOn(AndroidSchedulers.mainThread()) //指定觀察者的執(zhí)行線程 .subscribe(observer); //訂閱事件
- 注意:
被觀察者多次指定線程,只有第一次指定的有效疗韵;
觀察者多次指定線程重挑,可以分開(kāi)有效;
-
observable.subscribeOn(Schedulers.newThread()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .doOnNext(new Consumer<Integer>() { @Override public void accept(Integer integer) throws Exception { Log.d(TAG, "After observeOn(mainThread), current thread is: " + Thread.currentThread().getName()); } }) .observeOn(Schedulers.io()) .doOnNext(new Consumer<Integer>() { @Override public void accept(Integer integer) throws Exception { Log.d(TAG, "After observeOn(io), current thread is : " + Thread.currentThread().getName()); } }) .subscribe(consumer);
- 注意:
-
MAP操作符
示例代碼- map操作符的作用就是對(duì)上游發(fā)送的每一個(gè)事件應(yīng)用一個(gè)函數(shù), 使得每一個(gè)事件都按照指定的函數(shù)去變化撩鹿。
- amp操作符可以將上游發(fā)來(lái)的事件轉(zhuǎn)換為任意的類型, 可以是一個(gè)Object, 也可以是一個(gè)集合。
【未完待續(xù)悦屏。节沦。〈∨溃】