RxJava基礎(chǔ)知識(二)

一.簡單使用RxJava的三個步驟

? ? 1.創(chuàng)建Observable,也就是我們常說的被觀察者

? ? 2.創(chuàng)建Observer,即觀察者

? ? 3.使用subscribe()進行訂閱

實例

Observable.just("Hello World").subscribe(new Consumer() {? ? @Override? ? public void accept(String s) throws Exception {? ? ? ? System.out.println(s);? ? }});

? 以上實例中 ?Observable.just() 方法創(chuàng)建一個被觀察者, Consumer是消費者,用于接收被觀察者發(fā)送的數(shù)據(jù)

? subscribe的多個重載方法

? ? 1.subscribe(onNext)

? ? 2.subscribe(onNext,onError)

? ? 3.subscribe(onNext,onError,onComplete)

? ? 4.subscribe(onNext,onError,onSubscribe)

onComplete是一個Action,Action和Consumer的區(qū)別是Action沒有參數(shù);在Rxjava中被觀察者鸟廓,觀察者,subscribe()方法三者缺一不可襟己,只有使用了subscribe()引谜,被觀察者才會開始發(fā)送數(shù)據(jù)。

5種常用的被觀察者

二.do操作符

? ?do操作符可以給Observable的生命周期的各個階段加上一系列的回調(diào)監(jiān)聽擎浴。

? 常見的do操作符的解釋:

三.Hot Observable和Cold Observable

? ? Hot Observable無論有沒有觀察者進行訂閱员咽,事件始終都會發(fā)生,當(dāng)有多個訂閱者時贮预,Hot Observable與訂閱者們的關(guān)系是一對多的贝室;Cold Observable是只有觀察者訂閱了,才開始執(zhí)行發(fā)射數(shù)據(jù)流的代碼仿吞,當(dāng)有多個訂閱者時滑频,cold observable與訂閱者們是一對一的關(guān)系;

? ? observable的just唤冈,create峡迷,range,fromXXX等操作符都能生成Cold Observable你虹。

Cold Observable如何轉(zhuǎn)換成Hot Observable绘搞?

? ? 1.使用publish枣申,生成ConnectableObservable

? ? 實例

? ??

? ?ConnectableObservable是線程安全的

2.使用Subject/Processor

? ?實例

? ?上述實例中,Subject既是Observable,又是Observer看杭;Subscject作為觀察者,可以訂閱目標(biāo)Cold Observable挟伙,是對方開始發(fā)送事件楼雹。同時它又可以作為Observable轉(zhuǎn)發(fā)或者發(fā)送新的事件,讓cold Observable借助Subject轉(zhuǎn)換為Hot Observable尖阔;Subject并不是線程安全的贮缅;

Hot Observable如何轉(zhuǎn)換成Cold Observable

??1.使用ConnectableObservable的refCount操作符

? ? 實例:

如果不是所有的訂閱者/觀察者都取消了訂閱,而只是部分取消介却,則部分的訂閱者觀察者重新開始訂閱時谴供,不會從頭開始數(shù)據(jù)流

Observeble的share操作符封裝了publish.refCount()調(diào)用,原來同上齿坷。

四桂肌,另外4種被觀察者Flowable,Single,Completable,Maybe

1.Flowable

? ??????1.RxJava2.x中,Observable不再支持被壓永淌,而改由Flowable來支持非阻塞式的背壓崎场,并且Flowable的所有操作符都強制支持背壓。

? ? ? ? 2.Flowable和Observable使用上的區(qū)別:

? ? ? ? ? ? ? ? ? ? 1.Observable一般處理最大不超過1000條的數(shù)據(jù)遂蛀,而Flowable可以處理以某種方式產(chǎn)生的超過10KB的元素

? ? ? ? ? ? ? ? ? ? 2.Obserbable一般處理GUI鼠標(biāo)事件谭跨,基本不會背壓。而Flowable一遍用于文件的讀取與分析李滴,讀取數(shù)據(jù)庫記錄螃宙,創(chuàng)建網(wǎng)絡(luò)I/O流

? ? ? ? ? ? ? ? ? ? 3.Observable處理同步流,F(xiàn)lowable創(chuàng)建一個響應(yīng)式非阻塞接口

2.Single

? ? ? ? 1.Single只有onSuccess和onError事件所坯,onSuccess能且只能發(fā)送一個數(shù)據(jù)

? ? ? ? 2.Single可以通過toXXX方法轉(zhuǎn)換成Observable谆扎,F(xiàn)lowable,Completable芹助,Maybe

3.Completable

? ? ? ? 1.?Completable只有onComplete和onError事件燕酷,所以Completable在創(chuàng)建后,不會發(fā)射任何數(shù)據(jù)周瞎,并且其所有的操作符也很少

? ? ? ? 2.我們可以通過fromXXX操作符來創(chuàng)建一個Completable

? ??????????Completable.fromAction(new Action() { @Override public void run() throws Exception { System.out.println("Hello world"); }});

? ? ? ? ??3.Completable經(jīng)常結(jié)合andThen操作符使用

4.MayBe

? ? ? ? ?1.MayBe可以看成是Single和Completable的結(jié)合

? ? ? ? ? ?2.MayBe也只能發(fā)射0或者一個數(shù)據(jù)苗缩,即使發(fā)射多個數(shù)據(jù),后面發(fā)射的數(shù)據(jù)也不會再處理


五声诸,Subject和Processor

Subject是一種特殊的存在酱讶,既是Observable,又是Observer彼乌,官網(wǎng)稱可以將Subject看做是一個橋梁或者代理



? ? ?Processor和Subject的作用相同泻肯,Processor能夠支持背壓渊迁,這是Processor和Subject的最大區(qū)別

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市灶挟,隨后出現(xiàn)的幾起案子琉朽,更是在濱河造成了極大的恐慌,老刑警劉巖稚铣,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件箱叁,死亡現(xiàn)場離奇詭異,居然都是意外死亡惕医,警方通過查閱死者的電腦和手機耕漱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抬伺,“玉大人螟够,你說我怎么就攤上這事∠康觯” “怎么了妓笙?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長能岩。 經(jīng)常有香客問我给郊,道長,這世上最難降的妖魔是什么捧灰? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任淆九,我火速辦了婚禮,結(jié)果婚禮上毛俏,老公的妹妹穿的比我還像新娘炭庙。我一直安慰自己,他們只是感情好煌寇,可當(dāng)我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布焕蹄。 她就那樣靜靜地躺著,像睡著了一般阀溶。 火紅的嫁衣襯著肌膚如雪腻脏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天银锻,我揣著相機與錄音永品,去河邊找鬼。 笑死击纬,一個胖子當(dāng)著我的面吹牛鼎姐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼炕桨,長吁一口氣:“原來是場噩夢啊……” “哼饭尝!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起献宫,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤钥平,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后姊途,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涉瘾,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年吭净,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肴甸。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡寂殉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出原在,到底是詐尸還是另有隱情友扰,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布庶柿,位于F島的核電站村怪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏浮庐。R本人自食惡果不足惜甚负,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望审残。 院中可真熱鬧梭域,春花似錦、人聲如沸搅轿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽璧坟。三九已至既穆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間雀鹃,已是汗流浹背幻工。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留黎茎,地道東北人会钝。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親迁酸。 傳聞我的和親對象是個殘疾皇子先鱼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容

  • RxJava RxJava是響應(yīng)式程序設(shè)計的一種實現(xiàn)。在響應(yīng)式程序設(shè)計中奸鬓,當(dāng)數(shù)據(jù)到達的時候焙畔,消費者做出響應(yīng)。響應(yīng)式...
    Mr槑閱讀 941評論 0 5
  • 目錄 1. Rx簡介2. Rxjava基礎(chǔ)知識3. Rxjava創(chuàng)建操作符4. Rxjava的線程操作5. Rxj...
    覆水無言閱讀 319評論 0 0
  • rxjava 五種觀察者模式 do操作符 do操作符給Observable的聲明周期的各個階段加上一些列的回調(diào)監(jiān)聽...
    wangsye閱讀 746評論 0 0
  • 一串远、Retrofit詳解 ·Retrofit的官網(wǎng)地址為 : http://square.github.io/re...
    余生_d630閱讀 1,832評論 0 5
  • 6.22杭州保姆縱火事件已經(jīng)過去5天了宏多,這5天我總是在期盼著,期盼著大伙熱衷到癡迷的朋友圈澡罚、空間伸但、微博里面能...
    曦蒻閱讀 195評論 0 0