ym—— Android網路架構Volley(終極篇),androidvolley
沒看使用過Volley的同學可以,先看看 Android網路架構Volley(體驗篇)和Android網路架構Volley(實戰篇)在進行本篇學習這樣會更好的理解本篇內容.
本篇內容主要是講Volley在某些細節方面的選擇和實現.值得我們學習的地方以及如果更好的使用Volley。
1.Volley本機快取為什麼有時候不會進行緩衝?
緩衝使用前提伺服器必須支援,緩衝,配置Cache-Control頭資訊,
因為Volley需要從這些頭資訊判斷緩衝是否已經到期。如果已經到期Volley將會重新從網路擷取資料。
本人用抓包工具抓了無法緩衝的返回頭資訊
可以支援緩衝的頭資訊
2.如果我們自己寫一個網路請求架構,我們內部實現會選擇使用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;}
這裡會判斷如果手機系統版本號碼是大於9(Android 2.3)的,則建立一個HurlStack的執行個體,否則就建立一個HttpClientStack的執行個體。實際上HurlStack的內部就是使用HttpURLConnection進行網路通訊的,而HttpClientStack的內部則是使用HttpClient進行網路通訊的,這裡為什麼這樣選擇呢?參考文章:Android訪問網路,使用HttpURLConnection還是HttpClient?這就是它為何這麼快的原因。
從這點我們可以學習到,要針對不同SDK版本做去相應更優的處理方式,這樣才能達到最好的效果。
3.Volley給我們提供了ImageRrequest,ImageLoader,NetworkImageView,它們分別使用於什麼情境為什嗎?
單張圖片的載入可以通過發起 ImageReuqst 請求來實現,但為了應用記憶體緩衝,推薦使用 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的尺寸是否有效、是否為同一張圖片進行判斷 // 在執行新請求前,也會取消上一次在這個View裡啟動的另一個已經失效的請求 // 由於篇幅的限制以及程式碼數太多,這裡不貼出具體實現的代碼 loadImageIfNecessary(false); } // 如果圖片已經滑離螢幕,變為不可見,將執行取消請求的操作 @Override protected void onDetachedFromWindow() { if (mImageContainer != null) mImageContainer.cancelRequest(); super.onDetachedFromWindow(); }}
在ListView載入多張圖片的時候,NetworkImageView可以防止出現圖片錯誤的現象,以及當NetworkImageView滑出螢幕的時候會取消載入圖片請求,這樣就保證載入多張圖片的時候使用者快速滑動列表的流暢性。給使用者帶來更優的體驗。
Android的Volley架構可以否用在與WebService的通訊上?
不能,你也是知道的 velloy使用的是http協議。而webservice使用的是soap。兩個不同的通訊機制
安卓手機版(Android)YMCALL網路電話要流量
ymcall網路電話通話過程使用流量非常小,不過如果您在Wifi環境下撥打使用,將會獲得更良好的體驗。