概念:
為什么要用RxAndroid:
異步操作非常笨重而且容易出錯,RxJava 使得你不用再這樣做了
RxAndroid:
響應式編程在Android上的開源庫,基于RxJava。
你需要了解以下概念,才能比較順利的閱讀:
Java基礎知識:泛型,回調,java多態
觀察者設計模式
使用版本:
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.0.1'
代碼:
String[] names = new String[]{"You", "Kui", "qian", "le"};
Observable<String> observable = Observable.fromArray(names);
Consumer<String> consumer =new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
System.out.println("Fuck " + s + "!");
}
};
observable.subscribe(consumer);
Observable.fromArray(names)分析:
public static <T> Observable<T> fromArray(T... items) {
ObjectHelper.requireNonNull(items, "items is null");
if (items.length == 0) {
return empty();
} else
if (items.length == 1) {
return just(items[0]);
}
return RxJavaPlugins.onAssembly(new ObservableFromArray<T>(items));
}
方法概要:
demo傳入的是一個String[],返回的是一個Observable<String>.
詳細分析:
1 length == 0: 則調用empty()方法,在EmptyObservableHolder中獲取一個空的并且立即完成訂閱的Observable。
2 length == 1: 調用just(String)方法,在ScalarSynchronousObservable中獲取只發出一次item事件就立即結束的Observable。
3 length > 1: 調用RxJavaPlugins.onAssembly(new ObservableFromArray<T>(items));方法返回一個發送多次事件的普通Observable。
生成Consumer對象:
Consumer<String> consumer =new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
System.out.println("Fuck " + s + "!");
}
};
在accept(String)方法里接收訂閱的事件。此處只是簡單的輸出結果
訂閱事件:
observable.subscribe(consumer);
訂閱事件,當消息發送時,會回調Action1的call()方法。
關鍵點:訂閱后的邏輯實現:
Observable.subscribe(consumer)
|
|
Observable.subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError,
Action onComplete, Consumer<? super Disposable> onSubscribe)
|
|
ObservableFromArray.subscribeActual(Observer)
|
|
ObservableFromArray .FromArrayDisposable.run()
在run()方法中遍歷數組,然后逐個回調LambdaObserver.onNext(String)方法
|
|
調用Consumer.accept()
補充:
Observable.just()方法是對Observable.from()的封裝。
Observable.interval(5, TimeUnit.SECONDS)每間隔5秒調用一次。
Observable.range(start,count)生成一系列整數。
Observable.timer(2, TimeUnit.SECONDS);延遲2秒后執行
擴展:
Airbnb:我們的安卓客戶端是如何使用 RxJava 的
AgeRa:Reactive Programming for Android
給 Android 開發者的 RxJava 詳解
官方文章