1. 概述
我想办斑,你在看這篇文章之前,應(yīng)該要先了解一下Rxjava的魅力赖草,具體百度啊学少,可以看看仍物線同學(xué)的文章。
create操作符秧骑,是一個(gè)什么都沒有的狀態(tài)下版确,創(chuàng)建一個(gè)Observable,可被觀察者乎折。
如上面的圖示:
橫軸是時(shí)間線绒疗,起點(diǎn)是create,從create骂澄,流水線開始吓蘑,create中每次調(diào)用onNext,就有一次時(shí)間點(diǎn)的觸發(fā)(紅點(diǎn))等等坟冲,最后磨镶,onComplete結(jié)束整個(gè)流水線。
2. 代碼
建立起一個(gè)可被觀察者:
//1.建立起一個(gè)可觀察者健提,observable琳猫。
Observable<Integer> observable = Observable.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> subscriber) {
for (int i = 0; i < 5; i++) {
subscriber.onNext(i);
}
subscriber.onCompleted();
}
});
這里,建立起來后私痹,代碼里面調(diào)用了五次觀察者的onNext脐嫂,當(dāng)然统刮,此時(shí),數(shù)據(jù)還并沒有發(fā)射账千。當(dāng)有訂閱者侥蒙,或者說,當(dāng)有觀察者觀察的時(shí)候蕊爵,才會(huì)觸發(fā)這段代碼運(yùn)行辉哥。
然后,我們看看觀察者:
//2.創(chuàng)建觀察者攒射。
Subscription subscription = observable.subscribe(new Observer<Integer>() {
@Override
public void onCompleted() {
LogUtils.e("onCompleted");
}
@Override
public void onError(Throwable throwable) {
}
@Override
public void onNext(Integer integer) {
LogUtils.e(integer.toString());
}
});
當(dāng)觀察者訂閱之后醋旦,代碼就開始運(yùn)行了。
看看Log:
10-21 15:23:01.658 22690-22690/testmodules.chestnut E/TAG: 0
10-21 15:23:01.658 22690-22690/testmodules.chestnut E/TAG: 1
10-21 15:23:01.658 22690-22690/testmodules.chestnut E/TAG: 2
10-21 15:23:01.658 22690-22690/testmodules.chestnut E/TAG: 3
10-21 15:23:01.658 22690-22690/testmodules.chestnut E/TAG: 4
10-21 15:23:01.659 22690-22690/testmodules.chestnut E/TAG: onCompleted
嗯会放,onNext調(diào)用了五次饲齐,最后onCompleted。
3. 觀察者的說明
Throwable
當(dāng)調(diào)用鏈拋出未Catch的異常時(shí)候咧最,會(huì)直接跳到
new Action1<Throwable>()
此時(shí)捂人,不會(huì)去調(diào)用onCompleted,整條鏈結(jié)束矢沿。
onNext
當(dāng)一個(gè)數(shù)據(jù)流完整的發(fā)射下來(中間沒有拋異常)滥搭,那會(huì)一個(gè)一個(gè)地調(diào)用onNext。
onCompleted
當(dāng)整條鏈都發(fā)射完畢(中間沒有拋異常)捣鲸,會(huì)調(diào)用:onCompleted瑟匆。如果有異常,會(huì)直接捕抓到Throwable栽惶,而不會(huì)調(diào)用onCompleted愁溜。
4. 最后
Rx是2015年,熱起來的一個(gè)新思想外厂,如果你還沒接觸冕象,就要趕緊了。新思想汁蝶,新技術(shù)的注入渐扮,必定將顛覆你的編程思想。這是一個(gè)潮流穿仪,你也必須跟上去席爽,不然你就落后了。