多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > 互聯(lián)網(wǎng) > [置頂] ym―― Android網(wǎng)絡(luò)框架Volley(終極篇)

[置頂] ym―― Android網(wǎng)絡(luò)框架Volley(終極篇)

來源:程序員人生   發(fā)布時間:2014-11-11 09:03:11 閱讀次數(shù):2416次

      沒看使用過Volley的同學(xué)可以,先看看 Android網(wǎng)絡(luò)框架Volley(體驗篇)和Android網(wǎng)絡(luò)框架Volley(實戰(zhàn)篇)在進(jìn)行本篇學(xué)習(xí)這樣會更好的理解本篇內(nèi)容.

本篇內(nèi)容主要是講Volley在某些細(xì)節(jié)方面的選擇和實現(xiàn).值得我們學(xué)習(xí)的地方和如果更好的使用Volley。


1.Volley本地緩存為何有時候不會進(jìn)行緩存?

緩存使用條件http://www.vxbq.cn/server/必須支持,緩存,配置Cache-Control頭信息,

由于Volley需要從這些頭信息判斷緩存是不是已過期。如果已過期Volley將會重新從網(wǎng)絡(luò)獲得數(shù)據(jù)。

本人用抓包工具抓了沒法緩存的返回頭信息

可以支持緩存的頭信息


2.如果我們自己寫1個網(wǎng)絡(luò)要求框架,我們內(nèi)部實現(xiàn)會選擇使用HttpURLConnection還是HttpClient?

我們通過源碼來看看Volley是如何選擇使用的

  

public static RequestQueue newRequestQueue(Context context, HttpStack stack) { File cacheDir = new File(context.getCacheDir(), DEFAULT_CACHE_DIR); String userAgent = "volley/0"; try { String packageName = context.getPackageName(); PackageInfo info = context.getPackageManager().getPackageInfo(packageName, 0); userAgent = packageName + "/" + info.versionCode; } catch (NameNotFoundException e) { } if (stack == null) { if (Build.VERSION.SDK_INT >= 9) { stack = new HurlStack(); } else { stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent)); } } Network network = new BasicNetwork(stack); RequestQueue queue = new RequestQueue(new DiskBasedCache(cacheDir), network); queue.start(); return queue; }
這里會判斷如果手機(jī)系統(tǒng)版本號是大于9(Android 2.3)的,則創(chuàng)建1個HurlStack的實例,否則就創(chuàng)建1個HttpClientStack的實例。實際上HurlStack的內(nèi)部就是使用HttpURLConnection進(jìn)行網(wǎng)絡(luò)通訊的,而HttpClientStack的內(nèi)部則是使用HttpClient進(jìn)行網(wǎng)絡(luò)通訊的,這里為何這樣選擇呢?參考文章:Android訪問網(wǎng)絡(luò),使用HttpURLConnection還是HttpClient?這就是它為什么這么快的緣由。

從這點我們可以學(xué)習(xí)到,要針對不同SDK版本做去相應(yīng)更優(yōu)的處理方式,這樣才能到達(dá)最好的效果。


 3.Volley給我們提供了ImageRrequest,ImageLoader,NetworkImageView,它們分別使用于甚么場景為何?

單張圖片的加載可以通過發(fā)起 ImageReuqst 要求來實現(xiàn),但為了利用內(nèi)存緩存,推薦使用 ImageLoader 

NetwoekImageView專門用于批量圖片加載的場景:

public class NetworkImageView extends ImageView { private String mUrl; // 默許顯示的圖片 private int mDefaultImageId; // 加載失敗時顯示的圖片 private int mErrorImageId; // 主方法入口 public void setImageUrl(String url, ImageLoader imageLoader) { mUrl = url; mImageLoader = imageLoader; // 這個方法將會對ImageView的尺寸是不是有效、是不是為同1張圖片進(jìn)行判斷 // 在履行新要求前,也會取消上1次在這個View里啟動的另外一個已失效的要求 // 由于篇幅的限制和代碼行數(shù)太多,這里不貼出具體實現(xiàn)的代碼 loadImageIfNecessary(false); } // 如果圖片已滑離屏幕,變成不可見,將履行取消要求的操作 @Override protected void onDetachedFromWindow() { if (mImageContainer != null) mImageContainer.cancelRequest(); super.onDetachedFromWindow(); } }
在ListView加載多張圖片的時候,NetworkImageView可以避免出現(xiàn)圖片毛病的現(xiàn)象,和當(dāng)NetworkImageView滑出屏幕的時候會取消加載圖片要求,這樣就保證加載多張圖片的時候用戶快速滑動列表的流暢性。給用戶帶來更優(yōu)的體驗。

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 国产午夜精品久久久久 | 亚洲成人在线免费视频 | 国产片在线看 | 在线观看日本一区 | 国产精品一区二区在线观看 | 世界一级毛片 | 久久精品亚洲一区二区 | 婷婷久久综合 | 国产在线不卡一区 | 久草免费小视频 | 91亚洲精品久久91综合 | 久久91精品国产一区二区 | 欧美人成人亚洲专区中文字幕 | 欧美xxxxx性另类 | 全国精品影院 | 国产国语一级毛片在线放 | 亚洲成人天堂网 | 2021精品国产综合久久 | 色综合欧美综合天天综合 | 国产一起色一起爱 | 亚洲欧美在线综合一区二区三区 | 日韩专区亚洲综合久久 | 伊人久久亚洲精品一区 | 久久99热成人精品国产 | 久久国产影视 | 亚洲精品大片 | 国产成人高清 | 久草干 | 免费jizz在线播放视频高清版 | 欧美九九视频 | 好好的曰www视频在线观看 | 国产欧美综合精品一区二区 | 欧美日韩福利视频一区二区三区 | 最近最新中文字幕在线第一页 | 久久精品欧美日韩精品 | 最近最新免费中文字幕高清 | 欧美视频自拍偷拍 | aⅴ天堂网 | 欧美日韩亚洲综合久久久 | 国产a级毛片 | 香蕉蕉亚亚洲aav综合 |