Rxjava學(xué)習(xí)筆記

操作符:

1.map(new Func1(...)) :用于變換Observable,返回新的Observable
調(diào)度器:
1.調(diào)用observeOn(...)后之后的操作符map等會(huì)立馬改變成在observeOn所設(shè)置的線程運(yùn)行
observeOn是設(shè)置訂閱者的運(yùn)行線程,即
2.調(diào)用subscribeOn(...)后炕置,到調(diào)用observeOn()為止剖煌,中間的操作符均在subscribeOn設(shè)置的線程運(yùn)行沥匈。(subscribeOn不管在哪調(diào)用神帅,都和開頭調(diào)用一樣效果,挠将,而且調(diào)用多次胳岂,只有第一次有用)。
3.默認(rèn)情況下舔稀, Observable.doOnSubscribe() 執(zhí)行在 subscribe() 發(fā)生的線程乳丰;而如果在 doOnSubscribe() 之后有 subscribeOn() 的話,它將執(zhí)行在離它最近的 subscribeOn() 所指定的線程内贮。

原理

  public interface Operator<R, T> extends Func1<Subscriber<? super R>, Subscriber<? super T>> {
    // cover for generics insanity
  }

 public final <R> Observable<R> lift(final Operator<? extends R, ? super T> operator) {
    return new Observable<R>(new OnSubscribe<R>() {
        @Override
        public void call(Subscriber<? super R> o) {
            try {
                Subscriber<? super T> st = hook.onLift(operator).call(o);
                try {
                    // new Subscriber created and being subscribed with so 'onStart' it
                    st.onStart();
                    onSubscribe.call(st);
                } catch (Throwable e) {
                   
                    Exceptions.throwIfFatal(e);
                    st.onError(e);
                }
            } catch (Throwable e) {
                Exceptions.throwIfFatal(e);
         
                o.onError(e);
            }
        }
    });
}


  public static <T> Observable<T> create(OnSubscribe<T> f) {
    return new Observable<T>(hook.onCreate(f));
   }

  protected Observable(OnSubscribe<T> f) {
    this.onSubscribe = f;
  }

首先产园,調(diào)用Observable.create(```),其實(shí)就是調(diào)用構(gòu)造函數(shù),將 onSubscribe保存為成員變量夜郁,調(diào)用subscribe(Subscriber subscriber)其實(shí)就是調(diào)用onSubscribe.call(subscriber)什燕。
這個(gè)call()函數(shù)就是我們自己重寫的那個(gè)函數(shù)。
而調(diào)用lift()操作符后竞端,新返回一個(gè)Observable屎即。

這里,我們梳理一下代碼流程:

  • 首先事富,調(diào)用Observable.create(···)技俐,生成Observable對(duì)象,記為ObservableA统台,它里面又一個(gè)成員變量OnSubscribe對(duì)象雕擂,我們記為OnSubscribeA,OnSubscribeA里面有我們重寫的call()方法贱勃。
  • 接下來井赌,我們調(diào)用lift()操作符進(jìn)行變換,又生成一個(gè)Observable對(duì)象贵扰,這個(gè)對(duì)象我們記為ObservableB,ObservableB對(duì)象是由lift()操作符生成的族展,與我們無關(guān),ObservableB的成員變量OnSubscribe對(duì)象也是新生成的拔鹰,并且是由lift()自己生成的,與我們無關(guān)贵涵,這個(gè)OnSubscribe對(duì)象我們記為OnSubscribeB列肢,OnSubscribeB的call()函數(shù)也是lift()生成的恰画,與我們無關(guān)。此步驟結(jié)束后返回ObservableB
  • 然后瓷马,我們調(diào)用subscribe(···)函數(shù)拴还,傳入Subscriber對(duì)象,調(diào)用ObservableB.OnSubscribeB.call(subscriber)欧聘。ok,接下來我們就看看
    ObservableB.OnSubscribeB.call(···)都干啥了片林。

ObservableB.OnSubscribeB.call(subscriber)分析:

  • 首先調(diào)用operator.call(subscriber),這個(gè)operator返回一個(gè)新的Subscriber,這步很關(guān)鍵怀骤,就是這步實(shí)現(xiàn)轉(zhuǎn)換费封,并且是逆向轉(zhuǎn)換。而且新生成的Subscriber包含舊的(這個(gè)舊的是指我們自己繼承重寫的Subscriber,就是subscribe(subscriber)中的參數(shù)subscriber)蒋伦,這個(gè)新生成的Subscriber用來接收最初ObservableA發(fā)出的數(shù)據(jù)弓摘,即作為ObservableA.OnSubscribeA(···)函數(shù)的參數(shù)。
  • 接下來調(diào)用新的Subscriber.onStart()痕届;
  • 然后調(diào)用ObservableA.OnSubscribeA.call(新的Subscriber)韧献,這個(gè)call()就是我們自己重寫的那個(gè)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末研叫,一起剝皮案震驚了整個(gè)濱河市锤窑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嚷炉,老刑警劉巖渊啰,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異渤昌,居然都是意外死亡虽抄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門独柑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迈窟,“玉大人,你說我怎么就攤上這事忌栅〕岛ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵索绪,是天一觀的道長(zhǎng)湖员。 經(jīng)常有香客問我,道長(zhǎng)瑞驱,這世上最難降的妖魔是什么娘摔? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮唤反,結(jié)果婚禮上凳寺,老公的妹妹穿的比我還像新娘鸭津。我一直安慰自己,他們只是感情好肠缨,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布逆趋。 她就那樣靜靜地躺著,像睡著了一般晒奕。 火紅的嫁衣襯著肌膚如雪闻书。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天脑慧,我揣著相機(jī)與錄音魄眉,去河邊找鬼。 笑死漾橙,一個(gè)胖子當(dāng)著我的面吹牛杆融,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播霜运,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼脾歇,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了淘捡?” 一聲冷哼從身側(cè)響起藕各,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎焦除,沒想到半個(gè)月后激况,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡膘魄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年乌逐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片创葡。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浙踢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出灿渴,到底是詐尸還是另有隱情洛波,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布骚露,位于F島的核電站蹬挤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏棘幸。R本人自食惡果不足惜焰扳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蓝翰,春花似錦光绕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽欣尼。三九已至爆雹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間愕鼓,已是汗流浹背钙态。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留菇晃,地道東北人册倒。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像磺送,于是被迫代替她去往敵國(guó)和親驻子。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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

  • 我從去年開始使用 RxJava 估灿,到現(xiàn)在一年多了崇呵。今年加入了 Flipboard 后,看到 Flipboard 的...
    Jason_andy閱讀 5,456評(píng)論 7 62
  • 前言我從去年開始使用 RxJava 馅袁,到現(xiàn)在一年多了域慷。今年加入了 Flipboard 后,看到 Flipboard...
    占導(dǎo)zqq閱讀 9,158評(píng)論 6 151
  • 本文僅為學(xué)習(xí)筆記汗销;不是原創(chuàng)文章犹褒; 給 Android 開發(fā)者的 RxJava 詳解 一:基本介紹 概念: 是一個(gè)實(shí)...
    shuixingge閱讀 659評(píng)論 0 1
  • 我科室的主任,在公司工作了近十年弛针,月初提出離職叠骑,因?yàn)楣ぷ鹘唤有枰粋€(gè)月時(shí)間,所以她最后這一個(gè)月斷斷續(xù)續(xù)的上...
    施小姐的靜夜思閱讀 960評(píng)論 0 1
  • 1朦拖、不好意思收取的紅包 朋友跟我通話了一個(gè)小時(shí),說了自己的近況厌衔,以及感情方面的一些疑惑璧帝,我就幫他做了些分析,結(jié)束談...
    Minilychang閱讀 637評(píng)論 0 0