Volley框架分析
来源:互联网 发布:slam算法工作原理 编辑:程序博客网 时间:2024/05/17 02:17
喜欢逛github的朋友们就知道现在开源的一些主流的访问网络的框架由xutils, Afinal,Volley等,其他的没具体看过。下面来介绍Volley框架的原理。
1.首先介绍下volley是google官方推出的框架。Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。
优势:适合轻量级数据频繁访问网络的环境。 劣势: 不适合大数据,比如下载文件。(如果数据太大就会出OOM)
2.先来看看怎么使用
mQueue = Volley.newRequestQueue(getApplicationContext()); mQueue.add(new JsonObjectRequest(Method.GET, url, null, new Listener() { @Override public void onResponse(JSONObject response) { Log.d(TAG, "response : " + response.toString()); } }, null)); mQueue.start();
</pre><pre class="java" name="code">
3.下面介绍一下运行的过程
可以参照这幅图,大概流程就是Volley先初始化一个请求队列,请求队列start, 开启1个读取缓存的线程CacheDispatcher和4个访问网络的线程NetworkDispatcher,其中访问网络的细节有兴趣的可以研究, 访问成功后将数据封装,然后通过handler回调到request。
下面继续研究一下细节
①.volley在访问网络的时候在2.3版本之前是通过HttpClient, 2.3版本以后用的是HttpURLConnection。 因为在2.3之前HttpURLConnection极不稳定 ,而2.3以后HttpURLConnection改善了许多,HttpURLConnection的效率较高,所以采用HttpURLConnection。
②RequestQueue.add(Request)的时候是先将request添加到缓存队列中,在start的方法中开启一个读取缓存数据的线程和4个访问网络的线程, 当读取缓存中不存在 的时候再将request添加到访问网络的队列中。这几个线程中都有死循环,request = mQueue.take(), 阻塞等待。 和系统的handler等待机制差不多。(这里有不理解的地方时为什么不是使用线程池管理, 如果没有网络使用的时候, 5个线程还是会阻塞等待在那里。可能这就是适合频繁访问网络)
③.在NetworkDispatcher的run方法中有两个处理数据的方法,mNetwork.performRequest(request)是将网络访问的信息序列化NetworkResponse, request.parseNetworkResponse(networkResponse)是将数据转化为我们想要的数据格式(String,Bitmap等),该方法的具体实现是在不同request中的(JsonObjectRequest),这样就增强了扩展性,降低了耦合度。然后也方便将byte数组缓存到文件中。
④.回调,在NetworkDispatcher访问网络和数据处理成功或失败后,执行回调。ExecutorDelivery类中postResponse方法,其中ExecutorDelivery是在RequestQueue中创建的
其中Handler 的创建是new Handler(Looper.getMainLooper())) , 这就是表示创建的Handler是会在UI线程中。
最后差不多结束, 有很多细节没有明确讲出来, 表达能力和组织能力不太好,第一次写博客!! 解读开源框架我一般的步骤都是:怎么使用----》了解整体的运行流程-----》了解细节---》全局的思考这样设计优势。 大概就这个步骤。 希望不喜欢的也勿喷, 有建议的可以交流, 大家共同进步。 从现在以后 还有定时写一些技术的博客。 谢谢各位浏览者。
- Volley框架分析
- Volley框架分析
- Volley框架深入分析
- Volley框架源码分析
- Volley框架(五):Volley源码分析
- Volley框架核心源码分析
- Volley框架的流程图分析
- Volley框架的流程图分析
- 网络框架Volley原理分析
- Android-Volley框架原理分析
- Volley框架的流程图分析
- Volley网络请求框架分析
- 网络框架Volley原理分析
- android-----Volley框架源码分析
- android-----Volley框架源码分析
- 网络框架Volley原理分析
- 【Android框架】volley源码分析
- Volley(四) Volley框架(从源码角度分析)
- 通过运算符交换两个值
- Java中数据的内存分配
- 理解矩阵-孟岩
- java中的匿名内部类总结
- BZOJ 1046: [HAOI2007]上升序列
- Volley框架分析
- ACdream 1669 数一的偶像(JAVA大数开方)
- ps命令
- 《精通Linux设备驱动程序开发》——I2C
- 对称矩阵和上(下)矩阵用以为数组存取(数据结构)
- UML(一)——用例图,类图,对象图
- 关于DialogBox的使用
- centos6.5安装php;apache;phpmyadmin
- LeetCode | Symmetric Tree