RxAndroid--第一節--創建Observables--fromArray()源碼分析

概念:

 為什么要用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 詳解
官方文章


推薦大家看這篇文章:Rxjava系列--張磊BaronZhang
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容