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 observable = Observable.fromArray(names);
    Consumer consumer =new Consumer() {
        @Override
        public void accept(String s) throws Exception {
            System.out.println("Fuck  " + s + "!");
        }
    };
    observable.subscribe(consumer);
Observable.fromArray(names)分析:
public static  Observable 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(items));
}

方法概要:
    demo传入的是一个String[],返回的是一个Observable.
详细分析:
    1  length == 0: 则调用empty()方法,在EmptyObservableHolder中获取一个空的并且立即完成订阅的Observable。
    2  length == 1: 调用just(String)方法,在ScalarSynchronousObservable中获取只发出一次item事件就立即结束的Observable。
    3  length > 1: 调用RxJavaPlugins.onAssembly(new ObservableFromArray(items));方法返回一个发送多次事件的普通Observable。
生成Consumer对象:
  Consumer consumer =new Consumer() {
        @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 onNext, Consumer onError,
        Action onComplete, Consumer 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

你可能感兴趣的:(RxAndroid--第一节--创建Observables--fromArray()源码分析)