RxJava 初探

0.前言

本文主要記錄RxJava的初步用法,以對(duì)RxJava有一個(gè)直觀的感受。官網(wǎng)在這里异旧,RxJava項(xiàng)目地址在這里浴鸿。

1.基礎(chǔ)知識(shí)

ReactiveX(響應(yīng)式編程)根據(jù)官網(wǎng)介紹:ReactiveX is a library for composing asynchronous and event-based programs by using observable sequences.(ReactiveX是通過(guò)使用觀察序列構(gòu)成的異步和基于事件的程序庫(kù))也就是說(shuō)通過(guò)觀察者模式來(lái)完成的。既然是通過(guò)觀察者模式實(shí)現(xiàn)的也就包含了觀察者幔托、被觀察者、注冊(cè)、發(fā)布等等概念了胎许。

1.1基礎(chǔ)結(jié)構(gòu)

RxJava主要組成部分有observable, operator和susbscriber峻呛。一般響應(yīng)式編程的信息流如下所示:
Observable -> Operator 1 -> Operator 2 -> Operator 3 -> Subscriber
也就是說(shuō),observable是事件的生產(chǎn)者辜窑,subscriber是事件最終的消費(fèi)者钩述。
因?yàn)閟ubscriber通常在主線程中執(zhí)行,因此設(shè)計(jì)上要求其代碼盡可能簡(jiǎn)單穆碎,只對(duì)事件進(jìn)行響應(yīng)牙勘,而修改事件的工作全部由operator執(zhí)行。

1.2 案例

先用最簡(jiǎn)單的例子來(lái)體會(huì)這個(gè)框架所禀。
1)創(chuàng)建 Observable
Observable 即被觀察者方面,決定以什么樣的方式觸發(fā)觀察者。

Observable myObservable=Observable.create(new Observable.OnSubscribe<String>()
         {
           @Override
           public void call(Subscriber<? super String> sub)
          {
            sub.onNext("Hello, world!");
            sub.onCompleted();
          }
        }
);

2)創(chuàng)建Observer
Observer即觀察者色徘,決定事件被觸發(fā)時(shí)會(huì)有怎么樣的行為恭金。

      Observer<String> observer = new Observer<String>() { 
                   @Override 
                   public void onNext(String s) {
                               System.out.println("Item: " + s);
                   } 
                   @Override 
                   public void onCompleted() {
                              System.out.println("Completed!");
                   } 
                   @Override 
                   public void onError(Throwable e) { 
                             System.out.println("Error!"); 
                   }
     };

3)訂閱

      myObservable.subscribe(observer);

通過(guò)subscribe()方法就可以將觀察者與被觀察者進(jìn)行連起來(lái)。

2.操作符

有時(shí)候需要對(duì)原始輸入的事件進(jìn)行變換以簡(jiǎn)化流程褂策,這些功能的實(shí)現(xiàn)就需要operator來(lái)處理横腿。

Observable.just("Hello, world!")  
 .map(new Func1<String, String>() {  
     @Override  
     public String call(String s) {  
         return s + " -Dan";  
     }  
 })  
 .subscribe(s -> System.out.println(s));  

通過(guò)map()可以將原始的Hello, world!輸入轉(zhuǎn)換成Hello, world! -Dan傳遞給之后的處理流程。
這里有詳細(xì)操作符斤寂。

3.線程

在RxJava中耿焊,你可以通過(guò)subscribeOn()來(lái)指定Observer的運(yùn)行線程,通過(guò)observeOn()指定Subscriber的運(yùn)行線程遍搞。這兩個(gè)方法都是operator罗侯,因此它們可以像所有operator那樣作用于任何的Observable。

參考:

http://codethink.me/2015/05/09/intro-of-rxjava/?utm_source=tuicool&utm_medium=referral
http://reactivex.io/documentation/operators.html
http://gank.io/post/560e15be2dca930e00da1083

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末溪猿,一起剝皮案震驚了整個(gè)濱河市钩杰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌再愈,老刑警劉巖榜苫,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異翎冲,居然都是意外死亡垂睬,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)抗悍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)驹饺,“玉大人,你說(shuō)我怎么就攤上這事缴渊∩鸵迹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵衔沼,是天一觀的道長(zhǎng)蝌借。 經(jīng)常有香客問(wèn)我昔瞧,道長(zhǎng),這世上最難降的妖魔是什么菩佑? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任自晰,我火速辦了婚禮,結(jié)果婚禮上稍坯,老公的妹妹穿的比我還像新娘酬荞。我一直安慰自己,他們只是感情好瞧哟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布混巧。 她就那樣靜靜地躺著,像睡著了一般勤揩。 火紅的嫁衣襯著肌膚如雪咧党。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天陨亡,我揣著相機(jī)與錄音凿傅,去河邊找鬼。 笑死数苫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的辨液。 我是一名探鬼主播虐急,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼滔迈!你這毒婦竟也來(lái)了止吁?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤燎悍,失蹤者是張志新(化名)和其女友劉穎敬惦,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體谈山,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡俄删,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了奏路。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畴椰。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鸽粉,靈堂內(nèi)的尸體忽然破棺而出斜脂,到底是詐尸還是另有隱情,我是刑警寧澤触机,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布帚戳,位于F島的核電站玷或,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏片任。R本人自食惡果不足惜偏友,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蚂踊。 院中可真熱鬧约谈,春花似錦、人聲如沸犁钟。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)涝动。三九已至迈勋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間醋粟,已是汗流浹背靡菇。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留米愿,地道東北人厦凤。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像育苟,于是被迫代替她去往敵國(guó)和親较鼓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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