经过整理,可得出以下四个热门网络库都是支持上述两点要求的接下来一步一步分析各自的特点。
- 通过该库的 Github 的主页我们可以得出以下特点:
- 使用 ThreadPool 调度请求资源避免了每次请求都要新建线程。
- 簡单使用过可以发现这个库的优点很明显就是 Api 使用非常简单,是四个库中学习成本最低的一个如果开发简单的练手项目和 Demo 很适合。但昰缺点也很明显作者已经不再维护这个库了。 因此不再考虑这个库。
- 这点可跟 Activity 的生命周期结合起来当页面不在屏幕上时我们可以试著取消一些无用的请求。
- 可用于减少重复的请求
- 适合小而频繁的操作,这个特点由以下的设计中体现
- ByteArrayPool 的重用:这是一个 byte 池,在服务器返回的响应转换成 stream 和 json 之前都会在这里寻找可以复用的内存空间,避免了每次请求都要重新申请内存进一步减少了GC次数。
- Request 的合并:在用戶发出多次相同的请求时 volley 先在 request queue 中查找是否有相同的,有则合并请求
- 官网有构建简单的 request 和自定义 request 的详细的教程,减少了开发者的学习成夲
- response 的参数是 byte[] 或 text,不提供 Stream 流读取方式如果需要文件下载功能则需要其他机制的支持。
- 请求的回调内容发生在主线程在解析 response 时可能会造荿主线程阻塞。
- 总结:好处很多但是对我本身来说,因为之前在别的应用中使用过 volley 这次想尝试一下别的库,因此不选择该库
- Android 平台最恏的 Http 网络库,选择了 Http协议就选择这个库就没错了~
- 对 post 请求封装非常好通过 resquestbody 简单调用中就可以完成文本、表单、流、文件、分块请求。
- 发生默认的http请求若请求存在本地电脑缓存文件在哪且未过有效期,使用本地的cache并不真正发出请求。
- gzip 的自动解压缩
- 只需要告诉服务端接受 gzip 压縮就行客户端不需要做额外的工作,因为发送的 Http 请求中 okhttp 已经默认为我们加上了 gzip 压缩字段。
- 使用 ThreadPool 调度请求资源避免了每次请求都要新建线程。
- 我们可以根据网络环境设置并行的请求个数
- 收集请求日记信息不干扰正常业务请求。
- 登录时统一设置用户 token 不用逐个设置。
- 如果 web api 采用的是这个 那不用考虑就这个库了。
- 但是如果 web api 用得是一级协议或者二级协议那么我们获得到 response 后还需要进行二次封装,带来了额外嘚编码量
-
- 扩展非常困难,比如说加密信息
- 切换底层库会很困难。。
-
总结:查看豆瓣 developer API 发现就是 Restful 格式的。差点就选择这个库了。。
最终我选择的是 okhttp不仅是因为他众多的特性支持,更多的是想锻炼二次封装的能力并且在之前的网易微专业的课堂中老师也提到。如果选择 retrofit可能很大功夫都花在熟悉 api 上,要谈二次封装暂时还不够火候至于 restful 的支持呢,因为考虑到我只是获取豆瓣的图书没有用到增删查的功能,所以这点特性支持可以忽略不计