亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

詳細理解 為什么說Volley適合數據量小,通信頻繁的網絡操作

2019-11-07 23:29:06
字體:
來源:轉載
供稿:網友

前言

網絡編程對于客戶端來說是一塊及其重要的地方,使用高效的網絡請求框架將為你的系統產生很大的影響。而Volley作為谷歌的一個開源項目,炙手可熱。有很多中小型公司的安卓移動客戶端的網絡程序都是基于volley的。 Volley的優點很多,光可擴展性這一條優點就值得我們稱贊。但是我想針對的是在 Google I/O 2013 大會上發布Volley的時候的一句話:a burst or emission of many things or a large amount at once(爆炸性的事件在很短的時間內發生),意思就是:Volley特別適合數據量小,通信量大的客戶端。同為網絡請求框架,為什么Volley會有這樣的特點?接下來,我就用我的理解來解釋一下。

ByteArrayPool

ByteArrayPool產生背景

根據類名,知道這是一個字節數組緩存池。沒錯,就是用來緩存 網絡請求獲得的數據。 當網絡請求得到返回數據以后,我們需要在內存開辟出一塊區域來存放我們得到的網絡數據,不論是json還是圖片,都會存在于內存的某一塊區域,然后拿到UI顯示,然而客戶端請求是相當頻繁的操作,想一下我們平時使用知乎等一些客戶端,幾乎每一個操作都要進行網絡請求(雖然知乎大部分是WebView)。那么問題來了:這么頻繁的數據請求,獲得數據以后我們先要在堆內存開辟存儲空間,然后顯示,等到時機成熟,GC回收這塊區域,如此往復,那么GC的負擔就相當的重,然而Android客戶端處理能力有限,頻繁GC對客戶端的性能有直接影響。我們能不能減少GC和內存的分配呢?我想這個問題就是這個類的產生背景。

實現原理(怎么實現緩存從而減少GC)

在ByteArrayPool中維護了兩個List集合。
屬性名作用類型
mBuffersByLastUse按照最近使用對byte[]排序LinkedList
mBuffersBySize按照byte[]大小對byte[]排序ArrayList
通過上述兩個屬性的作用可以分析出它們是ByteArrayPool類對byte[]的管理。

從緩沖區取空間

當請求數據返回以后,我們不是急于在內存開辟空間,而是從ByteArrayPool中取出一塊已經分配的內存區域。此時會調用ByteArrayPool的getBuf(int)方法,來得到一塊參數大小的區域,源碼如下:
[code] public synchronized byte[] getBuf(int len) {        for (int i = 0; i < mBuffersBySize.size(); i++) {            byte[] buf = mBuffersBySize.get(i);            if (buf.length >= len) {                mCurrentSize -= buf.length;                mBuffersBySize.remove(i);                mBuffersByLastUse.remove(buf);                return buf;            }        }        return new byte[len];    }

方法的第2行代碼,遍歷mBuffersBySize,找到最適合len大小的byte[]。第6 ~8行更新緩存池中數據的大小,并從兩個數組中去除分配出去的byte[]。如果在緩存池中沒有要求的byte[],此時會從內存分配一跨區域返回。

此方法主要的功能: 不必每次存數據都要進行內存分配,而是先查找緩沖池中有無適合的內存區域,如果有,直接拿來用,從而減少內存分配的次數。 其實這個方法有改進空間:由于在類中有一個mSizeLimit屬性,表示此緩沖區的最大值。我們可以在方法體的第一行判斷 len與mSizeLimit的大小,如否 len>mSizeLimit,直接進入到最后一句運行,否則,循環。修改后的方法如下:

= len) {                    mCurrentSize -= buf.length;                    mBuffersBySize.remove(i);                    mBuffersByLastUse.remove(buf);                    return buf;                }            }        }        return new byte[len];    }" data-sn將空間返回給緩存池如果只是拿數據,緩存區的只會越來越小,我們還需要向緩沖區中加入存儲空間。這個時候涉及到一個方法:returnBuf(byte[])。

[code] public synchronized void returnBuf(byte[] buf) {        if (buf == null || buf.length > mSizeLimit) {            return;        }        mBuffersByLastUse.add(buf);        int pos = Collections.binarySearch(mBuffersBySize, buf, BUF_COMPARATOR);        if (pos < 0) {            pos = -pos - 1;        }        mBuffersBySize.add(pos, buf);        mCurrentSize += buf.length;        trim();    }方法首先檢查 要插入的數據大小有沒有超出邊界,如果沒有,利用二分法找到插入位置,將數據插入到上述的兩個集合,完成排序。然后更新緩沖池的大小,以方便從緩沖區中取存儲空間。

結語

ByteArrayPool利用getBuf和returnBuf以及mBuffersByLastUse和mBuffersBySize完成字節數組的緩存。當需要使內存區域的時候,先從已經分配的區域中獲得以減少內存分配次數。當空間用完以后,在將數據返回給此緩沖區。這樣,就會減少內存區域堆內存的波動和減少GC的回收,讓CPU把更多的性能留給頁面的渲染,提高性能。通過這個類發現,谷歌對技術的細節十分考究。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人国产精品色哟哟| 91国产精品电影| 亚洲小视频在线观看| 欧美性生活大片免费观看网址| 国产成人福利夜色影视| 久久久国产成人精品| 欧美尺度大的性做爰视频| 亚洲xxx大片| 国产日本欧美视频| 国产日韩欧美影视| 欧美第一淫aaasss性| 国产亚洲视频中文字幕视频| 亚洲第一区第二区| 国产69精品久久久久久| 亚洲综合日韩在线| 亚洲福利视频在线| 久久精品国产免费观看| 国产精品久久久久久超碰| 在线播放日韩av| 久久夜色精品国产| 清纯唯美亚洲激情| 欧美在线视频一二三| 欧美日韩人人澡狠狠躁视频| 日韩动漫免费观看电视剧高清| 97高清免费视频| 91久久国产综合久久91精品网站| 国产狼人综合免费视频| 欧美午夜久久久| 亚洲丝袜av一区| 亚洲人成伊人成综合网久久久| 国产亚洲精品日韩| 亚洲女人天堂视频| 影音先锋欧美在线资源| 国产欧美精品一区二区| 2019中文字幕免费视频| 国产精自产拍久久久久久| 中文字幕亚洲无线码a| 成人黄色在线播放| 久久久精品在线| 久久人人爽国产| 亚洲91av视频| 色香阁99久久精品久久久| 97精品国产97久久久久久春色| 日韩欧美有码在线| 7m第一福利500精品视频| 亚洲国产精彩中文乱码av在线播放| 日韩美女在线观看一区| www.欧美三级电影.com| 中文字幕av日韩| 精品久久久久国产| 一区二区三区日韩在线| 日韩在线欧美在线| 久久久久久久一区二区| 国产69精品久久久| 亚洲欧洲在线播放| 成人精品视频久久久久| 亚洲字幕在线观看| 国产午夜精品免费一区二区三区| 亚洲欧美日韩天堂一区二区| 欧美日韩成人在线观看| 日韩在线中文字| 91亚洲永久免费精品| 国产丝袜精品视频| 久久视频这里只有精品| 欧美成人在线免费视频| 亚洲男人天堂手机在线| 欧美性xxxx在线播放| 亚洲日韩欧美视频| 欧美性xxxxx| 91网在线免费观看| 成人午夜两性视频| 日韩中文有码在线视频| 亚州欧美日韩中文视频| 欧美性xxxx极品hd欧美风情| 91av在线看| 日韩免费看的电影电视剧大全| 在线观看91久久久久久| 91极品视频在线| 91极品视频在线| 欧美成人精品一区二区三区| 国模吧一区二区| 91高潮精品免费porn| 热久久这里只有| 日韩大片免费观看视频播放| 国产精品流白浆视频| 91高清视频在线免费观看| 中文国产成人精品| 久久人人爽亚洲精品天堂| 久久伊人精品视频| 中文字幕亚洲国产| 久久国产天堂福利天堂| 欧美激情视频在线免费观看 欧美视频免费一| 丝袜美腿精品国产二区| 91大神在线播放精品| 亚洲japanese制服美女| 成人a视频在线观看| 欧美在线一级视频| 国产在线视频2019最新视频| 欧美老女人性生活| 97视频人免费观看| 国产精品情侣自拍| 日韩av色综合| 国产精品第一区| 亚洲视频欧美视频| 98精品国产自产在线观看| 久久中文字幕一区| 国产九九精品视频| 国产亚洲激情视频在线| 亚洲成人xxx| 亚洲娇小xxxx欧美娇小| 77777少妇光屁股久久一区| 亚洲国产精品中文| 欧美日韩福利视频| 久久色在线播放| 欧美寡妇偷汉性猛交| 91国在线精品国内播放| 日本精品视频在线观看| 亚洲最大福利网站| 亚洲男人天堂九九视频| 日本韩国在线不卡| 欧美视频裸体精品| 欧美巨乳美女视频| 成人免费视频xnxx.com| 日本高清不卡的在线| 亚洲一区二区三区久久| 日韩中文在线视频| 国产一区深夜福利| 少妇高潮久久77777| 久久成人18免费网站| 亚洲国产欧美精品| 亚洲国产精品悠悠久久琪琪| 亚洲第一福利网站| 色七七影院综合| 亚洲精品电影久久久| 揄拍成人国产精品视频| 日韩第一页在线| 全亚洲最色的网站在线观看| 国产精品久久久久久久一区探花| 国产成人拍精品视频午夜网站| 国产精品成熟老女人| 亚洲精品wwwww| 97在线视频精品| 精品久久久久久久久久久久| 91精品免费久久久久久久久| 97精品一区二区三区| 亚洲人成电影网站色xx| 精品国产乱码久久久久久婷婷| 美女撒尿一区二区三区| 亚洲人成网在线播放| 98精品国产自产在线观看| 26uuu亚洲伊人春色| 色诱女教师一区二区三区| 亚洲第一视频网| 国产精品无av码在线观看| 国产精品一区二区三区久久| 黑人精品xxx一区一二区| 亚洲欧洲在线免费| 日韩精品久久久久久福利| 久久久精品一区| 大胆欧美人体视频| 欧美一级片久久久久久久| 26uuu国产精品视频| 激情久久av一区av二区av三区| 成人欧美一区二区三区在线湿哒哒|