1.Volley详解 Volley源码分析

1.Volley是什么?

2.Volley有什么用?(使用场景)

3.Volley的使用步骤

4.Volley的底层源码(工作原理)

1.Volley是什么?

Volley是谷歌2013年IO大会上推出的异步网络框架。Volley,支持请求String\JsonObject

\JsonArray\Image;分别对应与+Request。如:StringRequest\JsonObjectRequest\JsonArrayRequest\ImageRequest;

2.Volley的特点:

非常适用于请求数据量小但是请求频繁,即高并发的情况。

3.使用步骤:

1.创建请求

JsonObjectRequest request = new JsonObjectRequest();

2.获取请求队列(源码分析的入口)

RequestQueue  queue = Volley.newRequestQueue(this);

3.将请求添加到请求队列

queue.add(quest);

4.Volley的底层源码(工作原理):其中核心类VCRHN:9个:

Volley

Cache  CacheDispatcher

Request  RequestQueue  RequestDelivery

HttpStack

Network NetworkDispatcher


Volley默认发送的是Get请求。是因为:即默认创建请求对象时要传入3个参数,第一个url,第二个成功的回调,第三个失败的回调。如果想发送Post请求,可在创建请求时选择传入4个参数的,此时第一参数,即是设置请求方式,传入Method.Post即可。后面三个参数与默认时含义一样。

注意:当请求解析JsonArrayQuest时,需要一个传入Type类型的参数type,写法有些麻烦,但绝对是一个加分项:Type type = new TypeToke>(){ }.getType;

5.通过源码分析其原理:

RequestQueue  queue = Volley.newRequestQueue(this);【入口】

在创建请求队列对象时,这是主入口。这个方法有不同数量的参数的,最终获取缓

存路径,创建缓存文件,且获取包名+版本号;同时,根据stack ==

null 这个条件判断,进行版本适配。如果版本>9,即2.3,

1.Volley详解 Volley源码分析_第1张图片

要进行版本适配的原因:HttpClient android 5.0 开始过时;因为Apache公司不再维护了。Http android6.0,彻底废弃;

在该构造方法内,创建了queue,同时调用queue.start();启动队列。
queue.start();进入到start()方法内部,不管三七21,创建了CacheDispatcher(Thread的子类)对象,说白了就是创建了一个线程并开启。同时又创建了线程池里的默认的4条NetworkDispatcher对象(说白了也是子线程),并开启。

即:在添加请求到请求队列前,Volley就已在创建请求队列时,就创建完成并开启了5个子线程,一个缓存的CacheDispatcher,4个用于发送网络请求的NetworkDispatcher,等待请求到来。一旦有请求了,负责网络请求的子线程NetworkDispatcher对象,就拿着请求去请求数据了。这里创建多条子线程,也就体现了Volley适用于请求数据量小但是请求频繁的情景。

1.Volley详解 Volley源码分析_第2张图片

看完源码后的优化:

优化1.创建Volley单粒,避免每创建一个请求队列就同时内部自动创建5条子线程的内存损耗行为,所以把请求队列设置为单粒的。

优化2.如果打开了一个页面,假如是AActivity,自动去请求,假设有10个请求,在数据没有返回前,我返回了,即退出该页面。此时,部分请求在请求队列中排队,则此时最好的做法是取消剩余没有发送的请求,也叫Activity(或Fragment)与Volley的联动取消。

onDestroy(){

requestQueue.cancelAll();

}

具体做法:1.可以整体取消 requestQueue.cancelAll();

2.也可以针对性的取消:但先对请求对象设置一个标记Tag;request.setTag(xxxTag);然后就可以根据该标记有针对性的取消请求了。 requestQueue.cancelAll(xxxTag);

你可能感兴趣的:(1.Volley详解 Volley源码分析)