Volley學習(Volly分析)

   記錄下學習心得:html

   Volley是android平臺上的網絡通信庫,能使網絡通訊更快,更簡單,更便捷。Volly適合數據量不大可是通訊頻繁的場景。java

   先貼下Volley的架構圖:android

   Volley架構圖

         Volley框架設計的主要幾個類是Request(以及Volley提供的子類ImageRequest,StringRequest,JsonReques等),Volly,RequestQueue,CacheDispatcher,DiskBasedCache,NetworkDispatcher,BasicNetWork,HurlStack(HttpClientStack),ByteArrayPool,NetworkResponse,ExcutorDeliery(按照重新建一個Request請求到請求獲得處理的順序寫的)。緩存

       下面的分析也是按照請求從建立到獲得處理的順序來完成的。網絡

        在Volley框架中,Request的管理是由RequestQueue來控制的。當我建立一個新的Request請求時,先建立一個RequestQueue對象,架構

       RequestQueue= Volley.newRequestQueue(context);框架

      看下newRequestQueue裏面作了什麼。函數

  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 {
                // Prior to Gingerbread, HttpUrlConnection was unreliable.
                // See: http://android-developers.blogspot.com/2011/09/androids-http-clients.html
                stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent));
            }
        }

        Network network = new BasicNetwork(stack);

        RequestQueue queue = new RequestQueue(new DiskBasedCache(cacheDir), network);
        queue.start();

        return queue;
    }

   首先在android 默認的緩存文件中建立一個緩存目錄,在這裏爲何選擇系統默認的緩存文件夾,是由於放在系統默認的文件夾下,當apk刪除時,文件夾下的緩存也相應被刪除。性能

      設置userAgent後,開始建立HttpStack,Volley根據系統版原本建立不一樣Stack,若是SDk的版本小於9的話,選擇HtpClientSack,不然選擇HurlStack,Volley這樣作的緣由是學習

     在 Froyo(2.2) 以前,HttpURLConnection 有個重大 Bug,調用 close() 函數會影響鏈接池,致使鏈接複用失效,因此在 Froyo 以前使用 HttpURLConnection 須要關閉 keepAlive。

     另外在 Gingerbread(2.3) HttpURLConnection 默認開啓了 gzip 壓縮,提升了 HTTPS 的性能,Ice Cream Sandwich(4.0) HttpURLConnection 支持了請求結果緩存。

      再加上 HttpURLConnection 自己 API 相對簡單,因此對 Android 來講,在 2.3 以後建議使用 HttpURLConnection,以前建議使用 AndroidHttpClient。

      建立玩HttpStack後,開始建立請求隊列,RequestQueue裏的參數有兩個,一個是緩存處理類(DiskBasedCache),一個是網絡請求處理類(BasicNetwork),初始化完畢後,調用queue.start()方法,啓動線         程(這部分在RequestQueue中再分析)等待Request的到來。

相關文章
相關標籤/搜索