前言:面向?qū)ο笞兂墒敲钍骄幊痰囊环N,面向計(jì)算機(jī)硬件的抽象,有變量、賦值、表達(dá)式和控制語(yǔ)句。函數(shù)式編程是面向數(shù)學(xué)的抽象,將計(jì)算描述為表達(dá)式求值。響應(yīng)式編程時(shí)一種面向數(shù)據(jù)流和變化流的編程范式,數(shù)據(jù)跟新是相互關(guān)聯(lián)的,函數(shù)式編程和響應(yīng)式編程整合起來(lái)就是函數(shù)響應(yīng)式編程。當(dāng)下有兩種函數(shù)響應(yīng)式編程框架,其一是RXJava,另一個(gè)是Agera。將一系列的操作符鏈接起來(lái)就可以完成復(fù)雜的邏輯。代碼被分解成一系列可以組合的片段。這就是響應(yīng)式函數(shù)編程的魅力
RxJava最核心的兩個(gè)東西是Observables(被觀察者,事件源)和Subscribers(觀察者)。Observables發(fā)出一系列事件,Subscribers處理這些事件。這里的事件可以是任何你感興趣的東西(觸摸事件,web接口調(diào)用返回的數(shù)據(jù)。。。)
一個(gè)Observable可以發(fā)出零個(gè)或者多個(gè)事件,直到結(jié)束或者出錯(cuò)。每發(fā)出一個(gè)事件,就會(huì)調(diào)用它的Subscriber的onNext方法,最后調(diào)用Subscriber.onNext()或者Subscriber.onError()結(jié)束。
Rxjava的看起來(lái)很想設(shè)計(jì)模式中的觀察者模式,但是有一點(diǎn)明顯不同,那就是如果一個(gè)Observerble沒(méi)有任何的的Subscriber,那么這個(gè)Observable是不會(huì)發(fā)出任何事件的。
設(shè)計(jì)特點(diǎn)
1、 Observable可以是一個(gè)數(shù)據(jù)庫(kù)查詢,Subscriber用來(lái)顯示查詢結(jié)果;Observable可以是屏幕上的點(diǎn)擊事件,Subscriber用來(lái)響應(yīng)點(diǎn)擊事件;Observable可以是一個(gè)網(wǎng)絡(luò)請(qǐng)求,Subscriber用來(lái)顯示請(qǐng)求結(jié)果。按理來(lái)說(shuō)SubScriber越簡(jiǎn)單越好,因?yàn)榭赡軙?huì)在主線程中運(yùn)行,而且他的核心功能時(shí)響應(yīng)而不是修改。
2、Subscriber并不知道操作流對(duì)數(shù)據(jù)的處理,它只知道自己接受一個(gè)Observable對(duì)象。
3、Observerable對(duì)象流不需要知道如何處理錯(cuò)誤,完全交由Subscriber處理
4、你可以使用subscribeOn()指定觀察者代碼運(yùn)行的線程,使用observerOn()指定訂閱者運(yùn)行的線程
5、當(dāng)調(diào)用Observable.subscribe(),會(huì)返回一個(gè)Subscription對(duì)象,你可以在后面使用這個(gè)Subscription對(duì)象來(lái)操作被觀察者和訂閱者之間的聯(lián)系。此外需要注意內(nèi)存泄露。
demo地址 https://github.com/LeeFranz/Android-Network/tree/master/RxJavaTest
參考文章:
https://blog.csdn.net/lzyzsd/article/details/41833541
https://blog.csdn.net/lzyzsd/article/details/44094895
https://blog.csdn.net/lzyzsd/article/details/44891933
https://blog.csdn.net/lzyzsd/article/details/45033611