概念:
为什么要用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 详解
官方文章