用RxJava你必須要深刻知道的一件事情

我用RxJava 的主要原因是它對(duì)我們數(shù)據(jù)流向的一種抽象,用好了,能梳理好代碼結(jié)構(gòu)官帘,不致于讓代碼寫到哪里就是哪里,這種寫到哪里就是哪里的代碼昧谊,真的對(duì)別人對(duì)自己都很不負(fù)責(zé)刽虹,對(duì)別人來說,維護(hù)起來想罵人呢诬,對(duì)于自己來說涌哲,其實(shí)是給自己挖坑。
很多時(shí)候尚镰,我發(fā)現(xiàn)大部分人用RxJava阀圾,看一下網(wǎng)上的demo怎么使用的,然后就模仿著用狗唉,結(jié)果用著用著就變形了初烘,怎么變形的?因?yàn)槟7轮荒軐W(xué)會(huì)一招分俯,接下來發(fā)生需求變化的時(shí)候肾筐,就用這一招來套,結(jié)果就出現(xiàn)了很多搞笑的使用場景澳迫。

比如局齿,網(wǎng)上介紹的RxJava,大致就是這樣的橄登,然后有人模仿用的時(shí)候抓歼,就記住了這個(gè)模式,然后心里面大致知道上面大括號(hào)內(nèi)是運(yùn)行在子線程拢锹,然后下面大括號(hào)內(nèi)谣妻,就是主線程。這個(gè)時(shí)候如果onNext執(zhí)行完成了卒稳,還需要去請(qǐng)求服務(wù)器蹋半,或者是其他耗時(shí)操作,然后有人就來了充坑,靈機(jī)一動(dòng)减江,我再創(chuàng)建一個(gè)Observable.create不就行了染突,于是在onNext下面又嵌套一層Observable.create,此時(shí)辈灼,代碼應(yīng)該已經(jīng)很長了份企,差不多就是這樣:

Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> emitter) throws Exception {
                   //請(qǐng)求服務(wù)器獲取數(shù)據(jù)
                emitter.onNext("數(shù)據(jù)1");
                emitter.onComplete();
            }
        })
                .observeOn(AndroidSchedulers.mainThread())//回調(diào)在主線程
                .subscribeOn(Schedulers.io())//執(zhí)行在io線程
                .subscribe(new Observer<String>() {
                ...
    
                    @Override
                    public void onNext(String value) {
                        Log.e(TAG,"onNext:"+value);
                            Observable.create(new ObservableOnSubscribe<String>() {
                                //再次去請(qǐng)求服務(wù)器
                                ...
                            }
                    }
                    ...
                });

這就是還不太了解RxJava是怎么控制數(shù)據(jù)流的,RxJava做成鏈?zhǔn)秸{(diào)用的方式巡莹,很多時(shí)候是為了讓每一個(gè)步驟都清晰司志,例如:

source //數(shù)據(jù)源
  .operator1() //操作1,先請(qǐng)求服務(wù)器接口
  .operator2() //操作2降宅,獲取本地?cái)?shù)據(jù)庫信息
  .operator3() //操作3骂远,比較本地?cái)?shù)據(jù)庫內(nèi)容并且更新數(shù)據(jù)庫
  .operatorN()  //操作N,可能還有很多操作腰根。激才。。
  .subscribe(consumer) // 開始去消費(fèi)我最終的數(shù)據(jù)唠雕,比如:拿到列表數(shù)據(jù)贸营,我顯示出來列表

按照這樣的方式去維護(hù)我們的一個(gè)數(shù)據(jù)流程,就能夠很好的整理我們的代碼流程岩睁,一個(gè)整體的流程钞脂,就知道這整個(gè)流是做什么的。
RxJava的整個(gè)設(shè)計(jì)捕儒,都是圍繞對(duì)流做處理冰啃,你不需要去關(guān)心線程啟動(dòng)關(guān)閉,因?yàn)槿思矣腥蝿?wù)調(diào)度器刘莹,就是專門干這個(gè)事情的阎毅,你只需要
添加指定的任務(wù)調(diào)度器類型放到subscribeOn中就行了。

當(dāng)深刻的認(rèn)識(shí)到RxJava的宗旨就是對(duì)流做處理点弯,同時(shí)又能夠保證復(fù)雜業(yè)務(wù)也能梳理的很好的時(shí)候扇调,這就很足夠了,同時(shí)這個(gè)將能夠幫助你更好的理解源嗎的設(shè)計(jì)抢肛。

既然始終是圍繞著數(shù)據(jù)流來設(shè)計(jì)的框架狼钮,那肯定需要考慮到各種各樣的流:
合并流(比如你要顯示一個(gè)內(nèi)容的時(shí)候,需要多種服務(wù)器的數(shù)據(jù)捡絮,那么就存在多種數(shù)據(jù)源熬芜,數(shù)據(jù)源就需要合并,也就有了合并流)
轉(zhuǎn)換流(比如你獲取過來的數(shù)據(jù)需要轉(zhuǎn)換一下數(shù)據(jù)類型)
一堆對(duì)流進(jìn)行處理的操作符福稳,所以你能看到RxJava中有很多很多的操作符涎拉,這些東西本質(zhì)上就是為了方便你去更好的處理流,剛開始學(xué)習(xí)RxJava的時(shí)候,千萬不要給操作符給淹沒了鼓拧,因?yàn)樗皇且粋€(gè)幫助你提升效率的工具半火,有它沒它,你也可以用好RxJava寫出好的數(shù)據(jù)流向代碼季俩,讓代碼清晰可維護(hù)慈缔。

RxJava只有你能深刻的理解它是對(duì)數(shù)據(jù)流的控制,保證代碼清晰的一種工具种玛,你才能用好它,否者你會(huì)發(fā)現(xiàn)濫用RxJava將會(huì)影響代碼閱讀帶來的反向的效果瓤檐。

祝君寫出更好的代碼赂韵。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市挠蛉,隨后出現(xiàn)的幾起案子祭示,更是在濱河造成了極大的恐慌,老刑警劉巖谴古,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件质涛,死亡現(xiàn)場離奇詭異,居然都是意外死亡掰担,警方通過查閱死者的電腦和手機(jī)汇陆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來带饱,“玉大人毡代,你說我怎么就攤上這事∩滋郏” “怎么了教寂?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長执庐。 經(jīng)常有香客問我酪耕,道長,這世上最難降的妖魔是什么轨淌? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任迂烁,我火速辦了婚禮,結(jié)果婚禮上猿诸,老公的妹妹穿的比我還像新娘婚被。我一直安慰自己,他們只是感情好梳虽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布址芯。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谷炸。 梳的紋絲不亂的頭發(fā)上北专,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音旬陡,去河邊找鬼拓颓。 笑死,一個(gè)胖子當(dāng)著我的面吹牛描孟,可吹牛的內(nèi)容都是我干的驶睦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼匿醒,長吁一口氣:“原來是場噩夢啊……” “哼场航!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起廉羔,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤溉痢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后憋他,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體孩饼,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年竹挡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了镀娶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡揪罕,死狀恐怖汽畴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情耸序,我是刑警寧澤忍些,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站坎怪,受9級(jí)特大地震影響罢坝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜搅窿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一嘁酿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧男应,春花似錦闹司、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽牲迫。三九已至,卻和暖如春借卧,著一層夾襖步出監(jiān)牢的瞬間盹憎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國打工铐刘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留陪每,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓镰吵,卻偏偏與公主長得像檩禾,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子疤祭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

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