一、基本概念
[参考文章]
http://gold.xitu.io/post/580103f20e3dd90057fc3e6d
(1)、异步
不按照顺序在不同的线程之间切换,执行任务,与同步对立。等等…
(2)、观察者模式
==台灯==作为==观察者==,==开关==作为==被观察者==,台灯透过电线来观察开关的状态来并做出相应的处理
- 开关(被观察者)作为事件的产生方(生产“开”和“关”这两个事件),是主动的,是整个开灯事理流程的起点。
- 台灯(观察者)作为事件的处理方(处理“灯亮”和“灯灭”这两个事件),是被动的,是整个开灯事件流程的终点。
- 在起点和终点之间,即事件传递的过程中是可以被加工,过滤,转换,合并等等方式处理的(上图没有体现,后面对会讲到)。
RxJava也是基于观察者模式来组建自己的程序逻辑的,就是构建被观察者(Observable),观察者(Observer/Subscriber),然后建立二者的订阅关系(就像那根电线,连接起台灯和开关)实现观察,在事件传递过程中还可以对事件做各种处理。
Tips: Observer是观察者的接口, Subscriber是实现这个接口的抽象类,因此两个类都可以被当做观察者,由于Subscriber在Observe的基础上做了一些拓展,加入了新的方法,一般会更加倾向于使用Subscriber。
(3)、创建被观察者的方法
//1、产生被订阅者----开关---事件的起始点
public Observable getObservable(){
//1、正统
Observable observable0 = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("android 哈哈");
subscriber.onNext("ios 嘻嘻");
subscriber.onNext("java 呵呵");
subscriber.onCompleted();
}
});
//过滤器
observable0.filter(new Func1<String, String>() {
@Override
public String call(String s) {
if(s.equals("ios 嘻嘻")){
return "filter is success!";
}
Log.d("filter","filter onCompleted");
return s;
}
});
//2、非正统
Observable observable1 = just("android 哈哈","ios 嘻嘻","java 呵呵");
//3、非正统
String[] strArray ={"android 哈哈","ios 嘻嘻","java 呵呵"};
Observable observable2 = Observable.from(strArray);
return observable2;
}
(4)、创建观察者的方法
//2、产生观察者 --订阅者 ---事件的终点
public Subscriber getSubscrible(){
//1、正统
Subscriber subscriber0 =new Subscriber<String>(){
@Override
public void onCompleted() {
Log.d("DDDDD","handle this--- onCompleted");
}
@Override
public void onError(Throwable throwable) {
}
@Override
public void onNext(String s) {
Log.d("DDDDD","handle this---"+s);
}
};
return subscriber0;
}
(4)、订阅
订阅方法:
getObservable().subscribe(getSubscrible());
完整代码:
//3、订阅者 --- 订阅 --- 被订阅者 ,观察者 -- 观察 --- 被观察者
public void subscrible(){
// getObservable().subscribe(getSubscrible());
Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("android 哈哈");
subscriber.onNext("ios 嘻嘻");
subscriber.onNext("java 呵呵");
subscriber.onCompleted();
}
}).filter(new Func1<String, Boolean>() {
@Override
public Boolean call(String s) {
Log.d("DDDDD","handle this--- filter--"+(s!=null));
return s!=null;
}
}).subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {
Log.d("DDDDD","handle this--- onCompleted");
}
@Override
public void onError(Throwable throwable) {
}
@Override
public void onNext(String s) {
Log.d("DDDDD","handle this---"+s);
}
});
}
二、RxJava操作符
(1)、异步操作
(2)、延时操作
(3)、循环操作
//TODO 未完待续。。。