RxJava學習筆記(1)

觀察者模式:當一個對象發(fā)生變化時命雀,依賴它的所有對象都會被通知并且會自動更新

RxJava是典型的觀察者模式

生產(chǎn)者在沒有更多數(shù)據(jù)可用時能夠發(fā)出信號通知:onCompleted()

事件生產(chǎn)者在發(fā)生錯誤時能夠發(fā)出信號通知onError()

事件RxJava Observables能夠組合而不是嵌套悬钳,從而避免開發(fā)者陷入回調地獄

有四種角色

1.Observable可觀察者蔚袍,即被觀察者

2.Observer觀察者

3.Subscriber訂閱事件

4.Subjects

Observables和Subjects是兩個“生產(chǎn)”實體渺贤,Observers和Subscribers是兩個“消費”實體

Observable和Observer通過subscribe()方法實現(xiàn)訂閱關系六水,從而Observable可以在需要的時候發(fā)出事件來通知Observer

RxJava的基本實現(xiàn)

一.創(chuàng)建Observer

Observer=Subscriber

除了Observer接口之外桨啃,RxJava還內置一個實現(xiàn)了Observer的抽象類:Subscriber.

Subscriber對Observer接口進行了一些擴張踩蔚,但他們的基本使用方式是完全一樣的在RxJava的subscribe過程中不瓶,Observer也總是會先被轉換成一個Subscriber再使用

1.onStart(),這是Subscriber增加的方法禾嫉,它會在subscribe剛開始,而事件還未發(fā)送之前被調用湃番,可以用于做一些準備工作夭织,例如是數(shù)據(jù)的清零或重置,如果對準備工作的線程有要求可以使用doOnSubscribe()方法吠撮。

2.unsubscribe()這是subscriber所實現(xiàn)的另一個接口Subscription的方法尊惰,用于取消訂閱在使用之前應該先用isUnsubscribed()先判斷一下狀態(tài),要及時釋放Observable持有的Subscriber的引用泥兰,不然會有內存溢出的風險


二.創(chuàng)建Observable

使用create()方法創(chuàng)建一個Observable,并為他定義事件觸發(fā)規(guī)則

Observable observable = Obserable.create(new Observable.OnSubscribe){? ?

@Override

public void call(Subscribersubscriber){

??? }

}

這里傳入了一個OnSubscribe對象作為參數(shù)弄屡,OnSubscribe會被存儲在返回的Observable對象中,他的作用相當于一個計劃表鞋诗,當Observable被訂閱的時候膀捷,OnSubscribe的call方法會自動被調用。

Observable.just(T..)將傳入的參數(shù)依次發(fā)送出來

Observable.from(T[])將傳入的數(shù)組或Iterable拆分成具體對象后削彬,依次發(fā)送出來


三.Subscribe(訂閱)

創(chuàng)建了Observable和Observer之后全庸,再用subscribe()方法將他們聯(lián)結起來秀仲,整條鏈子就可以工作了

observable.subscribe(observer)

observable.subscribe(subscriber)

observable.subscribe(Subscriber)的內部實現(xiàn)

public Subscription subscribe(Subscriber subscriber){?

? subscriber.onStart();

? onSubscribe.call(subscriber);

??? return subscriber;

}

Observable并不是在創(chuàng)建的時候就立即開始發(fā)送事件壶笼,而是在它被訂閱的時候神僵,即當subscribe()被執(zhí)行的時候將傳入的Subscriber作為Subscription返回,這是為了方便unSubscribe()

subscribe()還支持不完整定義的回調覆劈,RxJava會自動根據(jù)定義創(chuàng)建出Subscriber

Action1?? onCompletedAction = new Action1(){

//onCompleted();

@Override

public void call(){

Log.d(tag,"completed");

?? }

};

observable.subscribe(onCompletedAction);

Action0 是 RxJava 的一個接口保礼,它只有一個方法 call(),這個方法是無參無返回值的责语;由于onCompleted() 方法也是無參無返回值的炮障,因此 Action0 可以被當成一個包裝對象,將onCompleted() 的內容打包起來將自己作為一個參數(shù)傳入 subscribe() 以實現(xiàn)不完整定義的回調坤候。這樣其實也可以看做將 onCompleted() 方法作為參數(shù)傳進了 subscribe()胁赢,相當于其他某些語言中的『閉包』。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末铐拐,一起剝皮案震驚了整個濱河市徘键,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌遍蟋,老刑警劉巖吹害,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異虚青,居然都是意外死亡它呀,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門棒厘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纵穿,“玉大人,你說我怎么就攤上這事奢人∥矫剑” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵何乎,是天一觀的道長句惯。 經(jīng)常有香客問我,道長支救,這世上最難降的妖魔是什么抢野? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮各墨,結果婚禮上指孤,老公的妹妹穿的比我還像新娘。我一直安慰自己贬堵,他們只是感情好恃轩,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布结洼。 她就那樣靜靜地躺著,像睡著了一般详恼。 火紅的嫁衣襯著肌膚如雪补君。 梳的紋絲不亂的頭發(fā)上引几,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天昧互,我揣著相機與錄音,去河邊找鬼伟桅。 笑死敞掘,一個胖子當著我的面吹牛,可吹牛的內容都是我干的楣铁。 我是一名探鬼主播玖雁,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼盖腕!你這毒婦竟也來了赫冬?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤溃列,失蹤者是張志新(化名)和其女友劉穎劲厌,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體听隐,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡补鼻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了筷黔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烹看。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡聚唐,死狀恐怖,靈堂內的尸體忽然破棺而出硼婿,到底是詐尸還是另有隱情,我是刑警寧澤禽车,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布寇漫,位于F島的核電站,受9級特大地震影響哭当,放射性物質發(fā)生泄漏猪腕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一钦勘、第九天 我趴在偏房一處隱蔽的房頂上張望陋葡。 院中可真熱鬧,春花似錦彻采、人聲如沸腐缤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岭粤。三九已至惜索,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間剃浇,已是汗流浹背巾兆。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留虎囚,地道東北人角塑。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像淘讥,于是被迫代替她去往敵國和親圃伶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內容