RxJava 之 Hello World

原理介紹##

什么是RxJava##

  • RxJava 就是異步
  • RxJava 的異步實(shí)現(xiàn),是通過一種擴(kuò)展的觀察者模式來實(shí)現(xiàn)的挟憔。
  • 一個(gè)響應(yīng)式編程框架

觀察者模式應(yīng)該不陌生,點(diǎn)這里可以重溫一下概念峦失。

RxJava組成###

RxJava最核心的兩個(gè)東西是Observable(被觀察者悴灵,事件源)Subscriber(觀察者)
Observable發(fā)出一系列事件擒滑,Subscriber負(fù)責(zé)處理這些事件腐晾。

一個(gè)Observable可以發(fā)出零個(gè)或者多個(gè)事件,直到結(jié)束或者出錯(cuò)丐一。每發(fā)出一個(gè)事件藻糖,就會(huì)調(diào)用它的Subscriber的onNext方法,最后調(diào)用Subscriber.onComplete()或者Subscriber.onError()結(jié)束钝诚。

RxJava相較于傳統(tǒng)的觀察者模式颖御,還有一個(gè)特點(diǎn)榄棵,就是沒有觀察者時(shí)凝颇,主題是不會(huì)發(fā)送事件的。也就說是當(dāng)一個(gè)Observable連一個(gè)Subscriber都沒有時(shí)疹鳄,Observable是不會(huì)發(fā)送事件的拧略。這點(diǎn)和我們上學(xué)時(shí),如果一節(jié)課一個(gè)學(xué)生都沒來聽課的話瘪弓,那么老師也不會(huì)去講課的道理是一樣的垫蛆。

RxJava之Hello world##

RxJava 是一個(gè)方便我們實(shí)現(xiàn)異步的框架。同時(shí)其“響應(yīng)式編程”的思路,對于我們也是一種挑戰(zhàn)袱饭。在加上其各種強(qiáng)大的操作符川无,調(diào)度器也是需要一定的學(xué)習(xí)成本的,姑且就把他當(dāng)做一門“新的語言”虑乖,這里我們就從輸出Hello world說起懦趋。

看到網(wǎng)上的許多教程都使用了Lambda語法進(jìn)行編碼,這個(gè)Lambda雖然很好疹味,但不想在學(xué)習(xí)RxJava的過程中仅叫,增加無畏的難度,所以暫時(shí)不采用糙捺,代碼暫時(shí)能看懂才是最要的诫咱,好看后期再說!

工程導(dǎo)入###

    compile 'io.reactivex:rxjava:1.1.7'
    compile 'io.reactivex:rxandroid:1.2.1'

完整版Hello World

/**
     * 被觀察者洪灯,事件源
     */
    private Observable<String> myObserveable;

    /**
     * 觀察者
     */
    private Subscriber<String> mySubscriber;

創(chuàng)建被觀察者

/**
     * 創(chuàng)建被觀察者Observable
     */
    private void InitObserverr() {
        myObserveable = Observable.create(
                new Observable.OnSubscribe<String>() {

                    @Override
                    public void call(Subscriber<? super String> subscriber) {
                        subscriber.onNext("hello world");
                        subscriber.onCompleted();
                    }
                }
        );
    }

創(chuàng)建觀察者

/**
     * 創(chuàng)建觀察者Subscribe
     */
    private void InitSubscriber() {
        mySubscriber = new Subscriber<String>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(String s) {
                Log.e(MainActivity.class.getSimpleName(), "onNext--->" + s);
                Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
            }
        };
    }

觀察者訂閱主題(事件源/被觀察者)

myObserveable.subscribe(mySubscriber);

這句代碼按照“字面意思”坎缭,感覺是被觀察者訂閱了觀察者。但實(shí)際上签钩,我們在這里實(shí)現(xiàn)的是觀察者訂閱被觀察者(主題)幻锁。希望不要混淆,并習(xí)慣這個(gè)邏輯边臼。

一旦mySubscriber訂閱了myObservable哄尔,myObservable就會(huì)調(diào)用mySubscriber對象的onNext和onComplete方法,mySubscriber就會(huì)打印出Hello World柠并!這里為了方便測試岭接,同時(shí)Toast了一個(gè)Hello World!

這個(gè)訂閱的實(shí)現(xiàn)臼予,其實(shí)很關(guān)鍵鸣戴。因?yàn)槲覀兦懊嬲f過,在RxJava中粘拾,沒有觀察者時(shí)窄锅,被觀察者是不會(huì)發(fā)布事件的

用強(qiáng)大的RxJava實(shí)現(xiàn)Hello World的打印缰雇,當(dāng)然不是我們的初衷入偷,這里只是從最基本的用法做出介紹。

精簡版Hello world###

簡化Observable

RxJava內(nèi)置了很多簡化創(chuàng)建Observable對象的函數(shù)械哟,比如Observable.just就是用來創(chuàng)建只發(fā)出一個(gè)事件就結(jié)束的Observable對象疏之,上面創(chuàng)建Observable對象的代碼可以簡化為一行

Observable<String> myObservable = Observable.just("Hello, world!");

簡化Subscribe

有時(shí)候,我們其實(shí)并不關(guān)心OnComplete和OnError暇咆,我們只需要在onNext的時(shí)候做一些處理锋爪,這時(shí)候就可以使用Action1類丙曙。

Action1<String> onNextAction = new Action1<String>() {  
    @Override  
    public void call(String s) {  
        System.out.println(s);  
    }  
};

subscribe 方法

subscribe方法有一個(gè)重載版本,接受三個(gè)Action1類型的參數(shù)其骄,分別對應(yīng)OnNext亏镰,OnComplete, OnError函數(shù)拯爽。

myObservable.subscribe(onNextAction, onErrorAction, onCompleteAction);

這樣為了僅僅輸出一個(gè)Hello World 拆挥,我們拋棄不重要的部分,代碼就可以簡化了:

Observable.just("Hello, world!")  
    .subscribe(new Action1<String>() {  
        @Override  
        public void call(String s) {  
              System.out.println(s);  
        }  
    });

好了某抓,RxJava 基礎(chǔ)用法就到這里了纸兔!


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市否副,隨后出現(xiàn)的幾起案子汉矿,更是在濱河造成了極大的恐慌,老刑警劉巖备禀,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洲拇,死亡現(xiàn)場離奇詭異,居然都是意外死亡曲尸,警方通過查閱死者的電腦和手機(jī)赋续,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來另患,“玉大人纽乱,你說我怎么就攤上這事±セ” “怎么了鸦列?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鹏倘。 經(jīng)常有香客問我薯嗤,道長,這世上最難降的妖魔是什么纤泵? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任骆姐,我火速辦了婚禮,結(jié)果婚禮上捏题,老公的妹妹穿的比我還像新娘玻褪。我一直安慰自己,他們只是感情好涉馅,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布归园。 她就那樣靜靜地躺著,像睡著了一般稚矿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天晤揣,我揣著相機(jī)與錄音桥爽,去河邊找鬼。 笑死昧识,一個(gè)胖子當(dāng)著我的面吹牛钠四,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播跪楞,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼缀去,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了甸祭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎渤涌,沒想到半個(gè)月后换团,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡校焦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年赊抖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寨典。...
    茶點(diǎn)故事閱讀 40,146評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡氛雪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出耸成,到底是詐尸還是另有隱情注暗,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布墓猎,位于F島的核電站捆昏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏毙沾。R本人自食惡果不足惜骗卜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望左胞。 院中可真熱鬧寇仓,春花似錦、人聲如沸烤宙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽躺枕。三九已至服猪,卻和暖如春供填,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背罢猪。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工近她, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人膳帕。 一個(gè)月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓粘捎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親危彩。 傳聞我的和親對象是個(gè)殘疾皇子攒磨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評論 2 356

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