android volley request 有对相应数据进行hander 处理吗
有hander机制的,来完成主要的异步操作. 原生开发中抛开AsyncTask,只有hander机制能显示子线程对于UI线程的操作.
1.volley只适应于8也就是2.2以上的版本,因为其中使用了androidhttpclient
2.volley工作原理:
下面这图是volley的工作原理:
其核心为requestqueue,在其中包含一个CacheDispatcher和若干个networkDispatcher。所有的下载任务都在一个优先级队列中维护,然后会发到cacheQueue,CacheDispatcher不断盯着cacheQueue,进行任务处理,其中的细节见3.若没得到cache,讲任务假如到networkQueue,networkDispatcher不断盯着networkQueue,进行网络请求,其中的细节见4。不管在cacheDispatcher还是networkDispatcher,若得到response,发出给listener接听到。
3.cacheDispatcher工作细节
此处用到了本地的文件缓存,此处设计借鉴了浏览器的缓存设计。会读取response的header请求,根据header的内容设置缓存的过期时间。缓存文件分为两部分,第一部分为存储缓存的头,第二部分就是缓存的实际内容。在读取缓存时,会根据头部过期时间的设置,判断是否需要再发出网络请求。
4.networkDispatcher工作细节
此处是网络请求,这块有两个关键类,一个是BasicNetwork,一个是httpStack。 basicNetwork中包含了httpstack,在httpstack中进行网络请求,然后basicNetwork对得到的response进行了parse和加入文件缓存等工作处理,最后在此处发出response,由listener接收。
5.图片处理
在上文中是volley一般的工作原理,根据图片的特点,volley中还有三个特殊的类 NetworkImageView,ImageLoader和ImageRequest对图片做了一些特殊处理。
ImageRequest在doparse中结合图片和控件特点,对bitmap生成进行大小缩放,以达到清晰
和占用更少内存的目的
ImageLoader是加载图片的helper,其中有个两个map,flightRequest和BatchResponse,flight的主要目的对每个request进行唯一性确认,使其不再重复生成,而且在控件显示图片不回出现错图的情况。batch response则是在收到图片厚发给listen时控制,这样也可以再此处取消请求,加快加载速度
NetworkImageView继承与Imageview,主要结合了ImageLoader可以异步展示网络图片,同时在detach时取消网络请求。