前言:
最近一直在学习,学的东西很多,很杂,一会看自定义View,一会看各种流行框架,虽然受益良多,但是学的太多,也没好好消化,所以就写几遍博客,巩固一下知识,也给大家分享点学习经验
RxJava是什么?
两个字:异步
RxJava怎么用?
用之前还是要了解清楚RxJava的一些基本概念
RxJava是观察模式的一个扩展,所以下面几个概念和观察者模式很相似
Observable
被观察者,也就是事件源
Observer、Subscriber
观察者,订阅者
subscribe()
Observer
或者Subscriber
通过subscribe()
订阅Observable
的事件,当有事件发生的时候,Observable
就会通知Observer
或者Subscriber
说了这么多,大家是不是有点晕,接下来就给大家来个简单的栗子,专治头晕
* 引入依赖
compile 'io.reactivex:rxjava:1.1.0'
compile 'io.reactivex:rxandroid:1.1.0'
首先先创建一个Observable
,要有事件源才能订阅事件是吧
Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("hello");
subscriber.onNext("RxJava");
subscriber.onCompleted();
}
});
好了,有了事件源,我们再来创建一个订阅者:Subscriber
Subscriber
是Observer
的实现类,不过它是一个抽象类哦。所以我们用Subscriber
就行
Subscriber<String> subscriber=new Subscriber<String>() {
@Override
public void onCompleted() {
Log.i(TAG, "onCompleted: ");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(String s) {
Log.i(TAG, "onNext: "+s);
}
};
事件源和订阅者都有了,然后我们就可以建立订阅关系了
observable.subscribe(subscriber);
分析代码
Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("hello");
subscriber.onNext("RxJava");
subscriber.onCompleted();
}
});
是不是看到一个熟悉的对象呢?没错,就是Subscriber
,我们的订阅者。
所以结合代码来看,就是当Observable
在OnSubscribe
的时候,也就是发生订阅关系的时候,会依次调用
Subscriber的onNext("hello")onNext("RxJava")onCompleted()方法
大家可以猜下运行的结果是什么
我们运行一下,结果是
I/Main: onNext: hello
I/Main: onNext: RxJava
I/Main: onCompleted:
不知道大家有没有猜对呢,好了,大家先练习一遍。
其他创建方式
Observable
除了直接create()外,还有两种方式可以创建
Observable.just("Hello","RxJava");
String [] strs={"Hello","RxJava"};
Observable.from(strs);
上面的两种方式创建的Observable
和下面创建的Observable
是等价的,对比一下代码,相信大家也能理解。记住,Observable.just(T t ...);
参数是可变的哦
Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("hello");
subscriber.onNext("RxJava");
subscriber.onCompleted();
}
});
接下来再说下Subscriber
的其他创建方式
Action1<String> onNext = new Action1<String>() {
@Override
public void call(String s) {
//onNext的时候调用
}
};
Action1<Throwable> onError = new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
//onError的时候调用
}
};
Action0 onCompleted = new Action0() {
@Override
public void call() {
//onCompleted的时候调用
}
};
observable.subscribe(onNext,onError,onCompleted);
上面的三个Action,等价于一个Subscriber
,也是Subscriber
的一种简写方式。比如我们的Subscriber
只要onNext()
方法的时候,我们可以这样做
observable.subscribe(onNext);
这时候,onNext
对象就是一个简化的Subscriber
,同理,其他两个相信大家也能举一反三
大家先练习练习,我们下节见。