您的位置:首页 > 理论基础 > 计算机网络

网络请求框架对比

2017-02-07 18:22 204 查看
什么是网络请求?

Android中网络请求方式有几种, 区别是什么?

Http协议:

什么是Volley?

早期Android发送http请求的方式有两种:HttpURLConnection和HttpClient. 在Android5.1后Google废除了对HttpClient的支持,而后官方开始推荐使用Volley进行网络请求框架, 它也是对HttpURLConnection的封装.

Volley的优缺点?

优点:适合进行数据量不大但网络请求频繁的操作, 对于大数据的网络操作, 如下载Volley就表现很糟糕.

为什么Volley不适合进行大数据请求?

刚开始我也有这个疑惑,解答疑惑的最好方式就是 Read The Fucking Source Code.

1. Volley的网络请求线程池默认大小为4。意味着可以并发进行4个请求,大于4个,会排在队列中。

2. Request#getBody() 方法返回byte[]类型,作为 Http.POST 和 Http.PUT body 中的数据。这就意味着需要把用 http 传输的数据一股脑读取到内存中。如果文件过大,内存...

考虑这样一个场景:
你同时上传4个文件,这四个文件都很大,这时候你的内存占用就很高,很容易oom。
这时候,你发网络请求,调用普通api。
所有的网络线程都被上传文件的任务占满了,你的网络请求只有在文件上传完毕后才能得到执行。体验就是,很慢!
所以Volley适合数据量小,频率快的请求。


Volley源码分析:

联网请求接口, 可以自定义网络请求类,实现HttpStack在创建请求队列时将此类传入即可.

I HttpStack

- HurlStack:基于HttpURLConnction的网络请求封装类.

- HttpClientStack

public HttpResponse performRequest(Request<?> request, Map<String, String> additionalHeaders)


1.创建缓存路径, 根据系统版本号选择使用HurlStack还是HttpClientStack,如果大于9则使用HurlStack.

2.创建BasicNetwork, 将HttpStack传入进去(BaseicNetwork是Network的实现类)

I Network :

public NetworkResponse performRequest(Request<?> request)


3.创建请求队列,接收Cache和Network两个对象, 调用start()然后返回请求队列.

I Cache

- NoCache

- DiskBasedCache
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: