本文以简单的例子来讲解Observable的创建操作符符:Create,From,Interval,Just,Range,Repeat.
- Create,通过调用观察者的方法从头创建一个Observable;
Observable.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> subscriber){
for (int i=0;i<3;i++){
subscriber.onNext(i);
}
}
})
.subscribe(new Subscriber<Integer>() {
@Override
public void onCompleted() {
//执行完所有任务后回调
}
@Override
public void onError(Throwable e) {
//发生错误时回调
}
@Override
public void onNext(Integer integer) {
Log.i("ysc", "create:"+integer.intValue() );
}
});
结果如下:
- Just,创建一个发射指定值的Observable,下面例子就是指定发送(1,2,3)
Observable.just(1,2,3)
.subscribe(new Action1<String>() {
@Override
public void call(String s) {
Log.i("ysc", "just:"+s);
}
});
- From,将其它的对象或数据结构转换为Observable,将相同类型的数据放到Future、Iterable或者数组里。
Integer[] items = { 1, 2, 3 };
Observable.from(items)
.subscribe(new Action1<Integer>() {
@Override
public void call(Integer integer) {
Log.i("ysc", "from:" + integer.intValue());
}
});
- Interval,创建一个按固定时间间隔发射整数序列的Observable,就相当于我们定时器,例如以下代码实现定时器功能要比Timer来简洁得多。
Observable.interval(5000, TimeUnit.MILLISECONDS)
.subscribe(new Action1<Long>() {
@Override
public void call(Long aLong) {
Log.i("ysc", "interval:" + aLong.intValue())
}
});
- Range,创建发射指定范围的整数序列的Observable,在实际开发中可以拿来替代for循环,发射一个范围内的有序整数序列,第一个参数是起始值必须不小于0,第二个参数为终值,左闭右开。
Observable.range(0, 10)
.subscribe(new Action1<Integer>() {
@Override
public void call(Integer integer) {
Log.i("ysc", "range:" + integer.intValue());
}
});
结果如下:
- Repeat,创建一个N次重复发射特定数据的Observable,简单来说就是创建一个指定执行多少次的Observable;下面表示指定执行2次。
Observable.range(0, 2)
.repeat(2)
.subscribe(new Action1<Integer>() {
@Override
public void call(Integer integer) {
Log.i("ysc", "repeat:" +integer.intValue());
}
});
本文只是简单地讲如何创建各种看起来功能各异的Observable,但其实他们都是一样的,譬如Just和From,Just的也调用了From的方法的,点进去看Just的源码
这里先不赘述原理,也先不深究源码,先知其然,先把基本用法弄清楚,再知之其所以然。