zoukankan      html  css  js  c++  java
  • Android应用框架-Volley网络通信框架

    1.Volley简介:

    • Volley是Google 推出的 Android 异步网络请求框架和图片加载框架。
    • 在 Google I/O 2013 大会上发布。

    2.Volley特点

    • 扩展性强。
    • Android目前提供两种http通信方式:在 Android2.3 及以上基于 HttpURLConnection,2.3 以下基于 HttpClient 实现。
    • 提供简便的图片加载工具。(例如:ImageLoader。它的构造器可以传入一个ImageCache缓存形参,实现了图片缓存的功能,同时还可以过滤重复链接,避免重复发送请求)
    • 综合上述特点:Volley特别适合数据量小,通信频繁的网络操作。(个人认为 Android 应用中绝大多数的网络操作都属于这种类型)。

    3.Volley总体设计

    1.RequestQueue:表示请求队列,其中StringRequest、JsonRequest、ImageRequest 都是Request的子类代表各种类型的请求。
    2.Dispatcher Thread:一个线程,用于调度处理各种请求。其中CacheDispatcher(用于调度和处理走缓存的请求)和NetworkDispatcher(用于调度和处理走网络的请求)。
    3.Get Data Interface:获取数据的接口。其中Cache 和netWork是两类数据获取接口。CacheDispatcher调用Cache从内存缓存中获取数据。NetworkDispatcher调用netWork类,让netWork类调用httpStack去处理Http请求,从服务器上面获取数据。
    4.Data:走缓存路线的数据存放在Memory和FileSystem。走网络路线的数据存放在server服务器中。

     综上所述:从 Volley 的总体设计图中可以发现,该设计主要是通过两种Dispatch Thread不断从RequestQueue中取出请求,根据是否已缓存,调用Cache或Network这两类数据获取接口之一,从内存缓存或是服务器取得请求的数据,然后交由ResponseDelivery去做结果分发及回调处理。

    Volley设计流程图:

    Volley在Android项目应用:

    1.RequestQueue的构建:
         通过Volley.java这个工具类,来构建一个可用于添加网络请求的RequestQueue对象。
         A.mQueue = Volley.newRequestQueue(mContext);
          B.mQueue = Volley.newRequestQueue(mContext,mHttpStack);
               
       
        上面两个方法的区别:A方法是默认的实现构造RequestQueue对象的方法。B方法中newRequestQueue静态方法中比A多了一个HttpStack参数,这个参数我们可以自定义,也可以采用基于 HttpURLConnection 的 HurlStack和基于HttpClient的 HttpClientStack。

    2.Request请求的构建:
          通过Request.java这个网络请求的抽象类,来构建一个request类的非抽象子类(StringRequest、JsonRequest、ImageRequest 或自定义)对象,并将其加入到RequestQueue中来完成一次网络请求操作。
         以自定义的类为例来讲解:自定义一个CommonRequest<T>类。
         A.当网络请求返回数据是String类型时。
         CommonRequest<String> request = new CommonRequest<>(mContext, HttpRequest.METHOD_GET,PARSING_TYPE.SEND_ID_CODE_URL, params, response, new TypeToken<Result<String>>() {}, null);
         B.当网络请求返回数据是某个自定义的具体的类,例如,User.java。
         CommonRequest<User> request = new CommonRequest<>(mContext, HttpRequest.METHOD_GET,PARSING_TYPE.SEND_ID_CODE_URL, params, response, new TypeToken<Result<User>>() {}, null);

    3.将Request请求添加到RequestQueue中:
             直接调用RequestQueue类中的add方法即可。
             mQueue.add(request);
    4.启动RequestQueue队列。
             直接调用RequestQueue类中的start方法即可。
             mQueue.start();
         
          start ()方法中,开启一个缓存调度线程CacheDispatcher和 n 个网络调度NetworkDispatcher,缓存调度线程不断的从缓存请求队列中取出 Request 去处理,网络调度线程不断的从网络请求队列中取出 Request 去处理。

    CacheDispatcher流程图:

    NetWorkDispatcher流程图:


       

  • 相关阅读:
    requests
    Unit5 Going places
    Unit1 A time to remember
    SQL:找到一个关于all some any的用法,可在SSMS里看效果
    SQL join小结
    mac 配置tomcat
    oc与java c++语法区别
    swift调用oc项目
    java网络编程之socket
    windows远程控制mac
  • 原文地址:https://www.cnblogs.com/hupp/p/4795023.html
Copyright © 2011-2022 走看看