什么是Rx
- ReactiveX是Reactive Extensions的縮寫(xiě)。
- Rx是一個(gè)編程模型衙传,目標(biāo)是提供一致的編程接口墨缘,幫助開(kāi)發(fā)者更方便的處理異步數(shù)據(jù)流。目前Rx支持大部分流行的編程語(yǔ)言驱富, 比如Java、C#匹舞、PHP等褐鸥。
-Rx是一個(gè)函數(shù)庫(kù),讓開(kāi)發(fā)者可以利用可觀察序列和LINQ風(fēng)格查詢操作符來(lái)編寫(xiě)異步和基于事件的程序赐稽。
-可以這樣定義:Rx = Observables + LINQ + Schedulers叫榕。 - ReactiveX不僅僅是編程接口浑侥,更是一種編程思想的突破。Rx還影響了其它程序庫(kù)晰绎、框架以及編程語(yǔ)言锭吨。
Rx模式——觀察者模式
-創(chuàng)建:Rx可以方便的創(chuàng)建事件流和數(shù)據(jù)流;
-組合:Rx使用查詢式的操作符組合和變換數(shù)據(jù)流寒匙;
-監(jiān)聽(tīng):Rx可以訂閱任何可以觀察的數(shù)據(jù)流并執(zhí)行操作零如。
Rx優(yōu)點(diǎn)——簡(jiǎn)潔
-函數(shù)式風(fēng)格:Rx可以方便的創(chuàng)建事件流和數(shù)據(jù)流;
-簡(jiǎn)化代碼:Rx的操作符可以將復(fù)雜的邏輯簡(jiǎn)化為很少的幾行代碼锄弱;
-異步錯(cuò)誤處理機(jī)制:傳統(tǒng)的try/catch沒(méi)辦法處理異步計(jì)算考蕾,Rx提供了合適的錯(cuò)誤處理機(jī)制;
-輕松使用并發(fā):Rx的Observables和Schedulers讓開(kāi)發(fā)者可以避免底層線程同步和各種并發(fā)問(wèn)題会宪。
什么是RxJava
RxJava是[ReactiveX](http://reactivex.io/)在JVM上的一個(gè)實(shí)現(xiàn)肖卧,也就是說(shuō)RxJava就是一種用Java語(yǔ)言實(shí)現(xiàn)的響應(yīng)式編程,來(lái)創(chuàng)建 基于事件的異步程序掸鹅。
提升開(kāi)發(fā)效率塞帐,降低維護(hù)成本一直是開(kāi)發(fā)團(tuán)隊(duì)永恒不變的宗旨。近一年來(lái)國(guó)內(nèi)的技術(shù)圈子中越來(lái)越多的開(kāi)始提及RxJava巍沙,學(xué)習(xí)和掌握RxJava已經(jīng)很有必要葵姥。RxJava能幫助我們簡(jiǎn)化代碼邏輯,提升代碼可讀性句携。這對(duì)于提升開(kāi)發(fā)效率榔幸、降低后期維護(hù)成本很有幫助。
RxJava正在Android開(kāi)發(fā)者中變的也越來(lái)越流行矮嫉。唯一的問(wèn)題就是上手不容易削咆,尤其是大部分人之前都是使用命令式編程語(yǔ)言。但是一旦你弄明白了蠢笋,你就會(huì)發(fā)現(xiàn)RxJava真是太棒了拨齐。
本系列幫助你了解RxJava,希望你學(xué)完之后能夠了解RxJava背后的思想(熟練掌握還需要多使用多實(shí)踐)昨寞,并且喜歡RxJava瞻惋。
學(xué)習(xí)RxJava
響應(yīng)式編程的主要組成部分是Observable、 operator和subscriber编矾。一般響應(yīng)式編程的信息流如下所示:
Observable-> Operator 01 -> Operator 02->Operator03 ->Subscriber
Observable是事件的生產(chǎn)者熟史,Subscriber是事件最終的消費(fèi)者。
因?yàn)镾ubscriber通常在主線程中執(zhí)行窄俏,因此設(shè)計(jì)上要求代碼盡可能簡(jiǎn)單,只對(duì)事件作出響應(yīng)(不對(duì)事件和數(shù)據(jù)進(jìn)行修改)碘菜,而修 改事件的工作全部由 operator執(zhí)行凹蜈。
Observable observable = Observable.create(newObservable.OnSubscribe() {
@Override
public voidcall(Subscriber subscriber) {
subscriber.onNext("hello word");
subscriber.onCompleted();
}
});
Observer observer =newObserver() {
@Override
public voidonCompleted() {
System.out.println("onCompleted");
}
@Override
public voidonError(Throwable e) {
System.out.println("onError");
}
@Override
public voidonNext(String s) {
System.out.println("onNext= "+ s);
}
};
observable.subscribe(observer);
上面提到修改事件在operator中執(zhí)行(下面代碼)
observable.map(new Func1<String, String>() {
@Override
public String call(String s) {
return s+" add content";
}
}).subscribe(observer);