国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

RxJava系列一(簡介)

Gu_Yan / 2385人閱讀

摘要:響應(yīng)式編程在介紹前,我們先聊聊響應(yīng)式編程。響應(yīng)式編程的一個關(guān)鍵概念是事件。今天,響應(yīng)式編程最通用的一個場景是我們的移動必須做出對網(wǎng)絡(luò)調(diào)用用戶觸摸輸入和系統(tǒng)彈框的響應(yīng)。并于年二月份正式向外展示了。

轉(zhuǎn)載請注明出處:https://zhuanlan.zhihu.com/p/20687178

RxJava系列1(簡介)

RxJava系列2(基本概念及使用介紹)

RxJava系列3(轉(zhuǎn)換操作符)

RxJava系列4(過濾操作符)

RxJava系列5(組合操作符)

RxJava系列6(從微觀角度解讀RxJava源碼)

RxJava系列7(最佳實踐)

前言

提升開發(fā)效率,降低維護成本一直是開發(fā)團隊永恒不變的宗旨。近一年來國內(nèi)的技術(shù)圈子中越來越多的開始提及Rx,經(jīng)過一段時間的學習和探索之后我也深深的感受到了RxJava的魅力。它能幫助我們簡化代碼邏輯,提升代碼可讀性。這對于開發(fā)效率的提升、后期維護成本的降低幫助都是巨大的。個人預測RxJava一定是2016年的一個大趨勢,所以也有打算將它引入到公司現(xiàn)有的項目中來,寫這一系列的文章主要也是為了團隊內(nèi)部做技術(shù)分享。

由于我本人是個Android程序猿,因此這一系列文章中的場景都是基于Android平臺的。如果你是個Java Web工程師或者是其它方向的那也沒關(guān)系,我會盡量用通俗的語言將問題描述清楚。

響應(yīng)式編程

在介紹RxJava前,我們先聊聊響應(yīng)式編程。那么什么是響應(yīng)式編程呢?響應(yīng)式編程是一種基于異步數(shù)據(jù)流概念的編程模式。數(shù)據(jù)流就像一條河:它可以被觀測,被過濾,被操作,或者為新的消費者與另外一條流合并為一條新的流。

響應(yīng)式編程的一個關(guān)鍵概念是事件。事件可以被等待,可以觸發(fā)過程,也可以觸發(fā)其它事件。事件是唯一的以合適的方式將我們的現(xiàn)實世界映射到我們的軟件中:如果屋里太熱了我們就打開一扇窗戶。同樣的,當我們的天氣app從服務(wù)端獲取到新的天氣數(shù)據(jù)后,我們需要更新app上展示天氣信息的UI;汽車上的車道偏移系統(tǒng)探測到車輛偏移了正常路線就會提醒駕駛者糾正,就是是響應(yīng)事件。

今天,響應(yīng)式編程最通用的一個場景是UI:我們的移動App必須做出對網(wǎng)絡(luò)調(diào)用、用戶觸摸輸入和系統(tǒng)彈框的響應(yīng)。在這個世界上,軟件之所以是事件驅(qū)動并響應(yīng)的是因為現(xiàn)實生活也是如此。

本章節(jié)中部分概念摘自《RxJava Essentials》一書

RxJava的來歷

Rx是微軟.Net的一個響應(yīng)式擴展,Rx借助可觀測的序列提供一種簡單的方式來創(chuàng)建異步的,基于事件驅(qū)動的程序。2012年Netflix為了應(yīng)對不斷增長的業(yè)務(wù)需求開始將.NET Rx遷移到JVM上面。并于13年二月份正式向外展示了RxJava。
從語義的角度來看,RxJava就是.NET Rx。從語法的角度來看,Netflix考慮到了對應(yīng)每個Rx方法,保留了Java代碼規(guī)范和基本的模式。

什么是RxJava

那么到底什么是RxJava呢?我對它的定義是:RxJava本質(zhì)上是一個異步操作庫,是一個能讓你用極其簡潔的邏輯去處理繁瑣復雜任務(wù)的異步事件庫。

RxJava好在哪

Android平臺上為已經(jīng)開發(fā)者提供了AsyncTask,Handler等用來做異步操作的類庫,那我們?yōu)槭裁催€要選擇RxJava呢?答案是簡潔!RxJava可以用非常簡潔的代碼邏輯來解決復雜問題;而且即使業(yè)務(wù)邏輯的越來越復雜,它依然能夠保持簡潔!再配合上Lambda用簡單的幾行代碼分分鐘就解決你負責的業(yè)務(wù)問題。簡直逼格爆表,拿它裝逼那是極好的!

多說無益,上代碼!

假設(shè)我們安居客用戶App上有個需求,需要從服務(wù)端拉取上海浦東新區(qū)塘橋板塊的所有小區(qū)Community[] communities,每個小區(qū)下包含多套房源List houses;我們需要把塘橋板塊的所有總價大于500W的房源都展示在App的房源列表頁。用于從服務(wù)端拉取communities需要發(fā)起網(wǎng)絡(luò)請求,比較耗時,因此需要在后臺運行。而這些房源信息需要展示到App的頁面上,因此需要在UI線程上執(zhí)行。(此例子思路來源于扔物線的給Android開發(fā)者的RxJava詳解一文)

new Thread() {
        @Override
        public void run() {
            super.run();
            //從服務(wù)端獲取小區(qū)列表
            List communities = getCommunitiesFromServer();
            for (Community community : communities) {
                List houses = community.houses;
                for (House house : houses) {
                    if (house.price >= 5000000) {
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                //將房子的信息添加到屏幕上
                                addHouseInformationToScreen(house);
                            }
                        });
                    }
                }
            }
        }
    }.start();

使用RxJava的寫法是這樣的:

Observable.from(getCommunitiesFromServer())
            .flatMap(new Func1>() {
                @Override
                public Observable call(Community community) {
                    return Observable.from(community.houses);
                }
            }).filter(new Func1() {
                @Override
                public Boolean call(House house) {
                    return house.price>=5000000;
                }
            }).subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Action1() {
                @Override
                public void call(House house) {
                    //將房子的信息添加到屏幕上
                    addHouseInformationToScreen(house);
                }
            });

從上面這段代碼我們可以看到:雖然代碼量看起來變復雜了,但是RxJava的實現(xiàn)是一條鏈式調(diào)用,沒有任何的嵌套;整個實現(xiàn)邏輯看起來異常簡潔清晰,這對我們的編程實現(xiàn)和后期維護是有巨大幫助的。特別是對于那些回調(diào)嵌套的場景。配合Lambda表達式還可以簡化成這樣:

Observable.from(getCommunitiesFromServer())
        .flatMap(community -> Observable.from(community.houses))
        .filter(house -> house.price>=5000000).subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(this::addHouseInformationToScreen);

簡潔!有美感!這才是一個有情懷的程序員應(yīng)該寫出來的代碼。

看完這篇文章大家應(yīng)該能夠理解RxJava為什么會越來越火了。它能極大的提高我們的開發(fā)效率和代碼的可讀性!當然了RxJava的學習曲線也是比較陡的,在后面的文章我會對主要的知識點做詳細的介紹,敬請關(guān)注!

如果大家喜歡這一系列的文章,歡迎關(guān)注我的知乎專欄和GitHub。

知乎專欄:https://zhuanlan.zhihu.com/baron

GitHub:https://github.com/BaronZ88

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/66516.html

相關(guān)文章

  • RxJava系列番外篇:RxJava解決復雜業(yè)務(wù)邏輯的案例

    摘要:之前寫過一系列的文章,也承諾過會盡快有的介紹。所以這次還是給大家分享一個使用解決問題的案例,希望對大家在使用的時候有一點點啟發(fā)。上述這一套復雜的業(yè)務(wù)邏輯如果使用傳統(tǒng)編碼方式將是極其復雜的。 之前寫過一系列RxJava1的文章,也承諾過會盡快有RxJava2的介紹。無奈實際項目中還未真正的使用RxJava2,不敢妄動筆墨。所以這次還是給大家分享一個使用RxJava1解決問題的案例,希望對...

    EscapedDog 評論0 收藏0
  • RxJava系列七(最佳實踐)

    摘要:按照計劃這一期是要介紹框架結(jié)構(gòu)和設(shè)計思想的,但是考慮到將在十月底發(fā)布正式版因此決定將框架結(jié)構(gòu)和設(shè)計思想分析放到正式版發(fā)布后再做。后續(xù)我也會有一系列的文章來介紹和的區(qū)別。首選我們需要調(diào)用系統(tǒng)來獲取所有已安裝的,所以在的方法中調(diào)用。 轉(zhuǎn)載請注明出處:[https://zhuanlan.zhihu.com/p/... RxJava系列1(簡介) RxJava系列2(基本概念及使用介紹) R...

    Carson 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<