自學(xué)之路 RxJava 2.0(一)初識(shí)原理

1.概念

    compile 'io.reactivex.rxjava2:rxjava:2.0.6'
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

查看rxandroid庫(kù),全部加起來(lái)大概三百行代碼,作用就是為android提供切換主線程此虑。(上面兩個(gè)不一定要一致,>2.0就可以口锭,rxandroid確實(shí)沒(méi)什么需要更新)

官方地址解釋:https://github.com/ReactiveX/RxJava


google翻譯一下:RxJava - JVM的反應(yīng)式擴(kuò)展 - 用于使用Java虛擬機(jī)的可觀察序列來(lái)編譯異步和基于事件的程序的庫(kù)朦前。
Rxjava的目的:解決基于異步介杆,基于事件的問(wèn)題

2.RxJava中的觀察者模式

觀察者模式(百科):觀察者模式定義了一種一對(duì)多的依賴關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽某一個(gè)主題對(duì)象韭寸。這個(gè)主題對(duì)象在狀態(tài)上發(fā)生變化時(shí)春哨,會(huì)通知所有觀察者對(duì)象,使他們能夠自動(dòng)更新自己恩伺。

小生對(duì)觀察者模式的理解:

電視信號(hào)發(fā)射臺(tái)和電視機(jī)的訂閱關(guān)系
寫法一:Observable

就比如電視信號(hào)發(fā)射臺(tái)和電視機(jī)的關(guān)系赴背。
Observable :是被觀察者(電視信號(hào)發(fā)射臺(tái))的意思
Observer:就是觀察者(電視機(jī))
明白了吧,當(dāng)你收看某個(gè)電視臺(tái)時(shí)晶渠,就相當(dāng)于建立好了訂閱關(guān)系凰荚,發(fā)射臺(tái)往外發(fā)數(shù)據(jù),電視機(jī)接收數(shù)據(jù)進(jìn)行處理顯示褒脯,這個(gè)時(shí)候就是你看到的電視了便瑟。
注意:多個(gè)電視機(jī)收聽同一個(gè)電視臺(tái)。同理番川,觀察者可以是多個(gè)到涂。

寫法二:Flowable(2.0新增)

在RxJava 2.x中對(duì)于backpressure的處理進(jìn)行了改動(dòng),為此將原來(lái)的Observable拆分成了新的Observable和Flowable颁督。Flowable 中的操作符大多與舊有的 Observable 類似养盗。
增加特性:支持背壓
就比如在網(wǎng)頁(yè)上看視頻一樣,寫法一需要來(lái)一個(gè)數(shù)據(jù)處理一個(gè)數(shù)據(jù)适篙,但是我們不可能看視頻是根據(jù)你接收到多少就處理顯示多少,但是不收我就丟失了你這次的數(shù)據(jù)箫爷。這時(shí)背壓就相當(dāng)于我們的緩沖效果嚷节,數(shù)據(jù)可以發(fā),我也會(huì)收虎锚,解決了“發(fā)送速率>接收處理速率”的問(wèn)題硫痰。原來(lái)以什么樣的速度產(chǎn)生事件,現(xiàn)在還是什么樣的速度不會(huì)變化窜护,主要處理的是Subscriber接收事件的方式效斑。
Flowable:就是被觀察者(電視信號(hào)發(fā)射臺(tái))
Subscriber:就是觀察者(電視機(jī))
原理和上面一樣。

3.RxJava的配置使用

Observable寫法的簡(jiǎn)單使用(后續(xù)將會(huì)詳細(xì)講述更多簡(jiǎn)潔寫法)

原來(lái)的new Thread 異步線程:

···
        new Thread() {
            @Override
            public void run() {
                super.run();
                SystemClock.sleep(2000);
                new Handler().post(new Runnable() {
                    @Override
                    public void run() {
                        Log.i(TAG, "run: " + Thread.currentThread().getName());
                    }
                });
            }
        }.start();
···

現(xiàn)在的Observable 異步寫法

        Log.i(TAG, "run: " + Thread.currentThread().getName());
        Observable.empty()
                .doOnComplete(new Action() {
                    @Override
                    public void run() throws Exception {
                        Log.i(TAG, "run: " + Thread.currentThread().getName());
                        SystemClock.sleep(2000);
                        Log.i(TAG, "run: " + Thread.currentThread().getName());
                    }
                })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .doOnComplete(new Action() {
                    @Override
                    public void run() throws Exception {
                        Log.i(TAG, "run: " + Thread.currentThread().getName());
                    }
                })
                .subscribe();

Observable 寫法打印結(jié)果

Observable 寫法打印結(jié)果

可以看到柱徙,很方便的實(shí)現(xiàn)了異步操作和線程切換缓屠。

Flowable寫法的簡(jiǎn)單使用(后續(xù)也將詳細(xì)講述)

Flowable 中的操作符大多與舊有的 Observable 類似。

          實(shí)現(xiàn)簡(jiǎn)單異步代碼护侮,略
         (上面Observable 異步寫法的代碼直接Observable改成Flowable 即可敌完。)

我就不拿上面的代碼再寫一遍了。
簡(jiǎn)單寫一個(gè)Flowable 事件分發(fā)背壓的寫法

        //發(fā)射器
        Flowable<String> flowable = Flowable.create(new FlowableOnSubscribe<String>() {
            @Override
            public void subscribe(FlowableEmitter<String> e) throws Exception {
                String names[] = {"yangbin", "lizhangyan", "laopo", "laogong"};
                for (String name : names) {
                    e.onNext(name);
                }
                e.onComplete();
            }
        }, BackpressureStrategy.BUFFER);
        //接收器
        Subscriber subscriber = new Subscriber<String>() {
            @Override
            public void onSubscribe(Subscription s) {
                s.request(Long.MAX_VALUE);
            }
            @Override
            public void onNext(String s) {
                Log.i(TAG, "onNext: " + s);
            }
            @Override
            public void onError(Throwable t) {

            }
            @Override
            public void onComplete() {
                Log.i(TAG, "onComplete: ");
            }
        };
        flowable.subscribe(subscriber);

Flowable寫法打印結(jié)果


Paste_Image.png

可以看到羊初,很方便的實(shí)現(xiàn)了事件的分發(fā)滨溉。

感謝您的瀏覽,更多寫法請(qǐng)看下期

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市晦攒,隨后出現(xiàn)的幾起案子闽撤,更是在濱河造成了極大的恐慌,老刑警劉巖脯颜,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哟旗,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡伐脖,警方通過(guò)查閱死者的電腦和手機(jī)热幔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)讼庇,“玉大人绎巨,你說(shuō)我怎么就攤上這事∪渥模” “怎么了场勤?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)歼跟。 經(jīng)常有香客問(wèn)我和媳,道長(zhǎng),這世上最難降的妖魔是什么哈街? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任留瞳,我火速辦了婚禮,結(jié)果婚禮上骚秦,老公的妹妹穿的比我還像新娘她倘。我一直安慰自己,他們只是感情好作箍,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布硬梁。 她就那樣靜靜地躺著,像睡著了一般胞得。 火紅的嫁衣襯著肌膚如雪荧止。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天阶剑,我揣著相機(jī)與錄音跃巡,去河邊找鬼。 笑死牧愁,一個(gè)胖子當(dāng)著我的面吹牛瓷炮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播递宅,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼娘香,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼苍狰!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起烘绽,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤淋昭,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后安接,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翔忽,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年盏檐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了歇式。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡胡野,死狀恐怖材失,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情硫豆,我是刑警寧澤龙巨,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站熊响,受9級(jí)特大地震影響旨别,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜汗茄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一秸弛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧洪碳,春花似錦递览、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)环鲤。三九已至纯趋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間冷离,已是汗流浹背吵冒。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓倔幼,卻偏偏與公主長(zhǎng)得像症革,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子琅攘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

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

  • 本篇文章介主要紹RxJava中操作符是以函數(shù)作為基本單位饮潦,與響應(yīng)式編程作為結(jié)合使用的琐脏,對(duì)什么是操作南捂、操作符都有哪些...
    嘎啦果安卓獸閱讀 2,866評(píng)論 0 10
  • 參考:給 Android 開發(fā)者的 RxJava 詳解-扔物線深入淺出RxJava 基礎(chǔ) "a library f...
    Vincen1024閱讀 545評(píng)論 0 1
  • 網(wǎng)上有很多關(guān)于RxJava的技術(shù)文章吴裤,大多數(shù)是關(guān)于1.x版本的。隨著 RxJava 2.0 的推出溺健,有些文章也介紹...
    Ruheng閱讀 80,094評(píng)論 23 239
  • 我從去年開始使用 RxJava 麦牺,到現(xiàn)在一年多了。今年加入了 Flipboard 后鞭缭,看到 Flipboard 的...
    Jason_andy閱讀 5,492評(píng)論 7 62
  • 一幅圖剖膳,N種描述 佛心,石像岭辣,茶 奇葩吱晒,花瓶,水 你看到的都是你想看到的世界 可以是一株蓮花易结,也可以是一朵奇葩 可...
    腦洞的洞閱讀 487評(píng)論 13 5