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的到来。

相关文章
相关标签/搜索