藏书阁app-网络库选型篇
藏书阁app-网络库选型篇
基本要求
- 支持 HTTP 协议
- 异步请求
可选的网络库
经过整理,可得出以下四个热门网络库都是支持上述两点要求的,接下来一步一步分析各自的特点。
android-async-http
- 通过该库的 Github 的主页我们可以得出以下特点:
- 使用 ThreadPool 调度请求资源,避免了每次请求都要新建线程。
- 支持 Gzip 解压缩
- 早期版本基于 Apache’s HttpClient
- 这是最被人诟病的一点, 因为 Apache’s HttpClient 在 Android 6.0 的 framework 层已经被移除了,现在的版本本质上还是使用 httpClient 的设计。
- 简单使用过可以发现这个库的优点很明显,就是 Api 使用非常简单,是四个库中学习成本最低的一个,如果开发简单的练手项目和 Demo 很适合。但是缺点也很明显,作者已经不再维护这个库了。。 因此不再考虑这个库。
Volley
- 特点:
- 支持取消请求
- 这点可跟 Activity 的生命周期结合起来,当页面不在屏幕上时我们可以试着取消一些无用的请求。
- 支持 http cache
- 可用于减少重复的请求。
- 支持取消请求
- 优点:
- 适合小而频繁的操作,这个特点由以下的设计中体现。
- ByteArrayPool 的重用:这是一个 byte 池,在服务器返回的响应转换成 stream 和 json 之前,都会在这里寻找可以复用的内存空间,避免了每次请求都要重新申请内存,进一步减少了GC次数。
- Request 的合并:在用户发出多次相同的请求时, volley 先在 request queue 中查找是否有相同的,有则合并请求。
- 官网有构建简单的 request 和自定义 request 的详细的教程,减少了开发者的学习成本。
- 适合小而频繁的操作,这个特点由以下的设计中体现。
- 缺点:
- response 的参数是 byte[] 或 text,不提供 Stream 流读取方式,如果需要文件下载功能则需要其他机制的支持。
- 请求的回调内容发生在主线程,在解析 response 时可能会造成主线程阻塞。
- 总结:好处很多,但是对我本身来说,因为之前在别的应用中使用过 volley ,这次想尝试一下别的库,因此不选择该库。
Okhttp
- Android 平台最好的 Http 网络库,选择了 Http协议就选择这个库就没错了~
- 特性:
- 大数据请求
- 对 post 请求封装非常好,通过 resquestbody 简单调用中就可以完成文本、表单、流、文件、分块请求。
- 完善 Http Cache
- 发生默认的http请求,若请求存在本地缓存且未过有效期,使用本地的cache,并不真正发出请求。
- gzip 的自动解压缩
- 只需要告诉服务端接受 gzip 压缩就行,客户端不需要做额外的工作,因为发送的 Http 请求中, okhttp 已经默认为我们加上了 gzip 压缩字段。
- 链路的复用
- 使用 ThreadPool 调度请求资源,避免了每次请求都要新建线程。
- 自定义请求调度
- 我们可以根据网络环境设置并行的请求个数
- 支持请求拦截器
- 收集请求日记信息,不干扰正常业务请求。
- 登录时统一设置用户 token, 不用逐个设置。
- 大数据请求
Retrofit
- 优点:
- 完善的 RESTful 支持。
- 如果 web api 采用的是这个 ,那不用考虑就这个库了。
- 但是如果 web api 用得是一级协议或者二级协议,那么我们获得到 response 后还需要进行二次封装,带来了额外的编码量。
- 提供对 RxJava 的支持
- 完善的 RESTful 支持。
缺点:
- 基于注解实现
- 扩展非常困难,比如说加密信息。
- 依赖 okhttp
- 切换底层库会很困难。。。。
REST :就是用 URL 定位资源,用 HTTP 描述操作,一种万维网软件架构风格.
RESTful :符合REST设计风格的Web API称为RESTful API。- 基于注解实现
总结:查看豆瓣 developer API 发现就是 Restful 格式的。豆瓣API手册。差点就选择这个库了。。。
总结
最终我选择的是 okhttp,不仅是因为他众多的特性支持,更多的是想锻炼二次封装的能力,并且在之前的网易微专业的课堂中老师也提到。如果选择 retrofit,可能很大功夫都花在熟悉 api 上,要谈二次封装暂时还不够火候。至于 restful 的支持呢,因为考虑到我只是获取豆瓣的图书,没有用到增删查的功能,所以这点特性支持可以忽略不计。
参考资料
- okhttp
- retrofit
- Volley 需翻墙
- android-async-http
- 网络请求哪家强 by stormzhang
- REST 维基百科
- 用通俗的语言解释什么叫 REST,以及什么是 RESTful?
藏书阁app-网络库选型篇相关推荐
- Python实战之网络与爬虫篇-----如何查看用户Star了哪些库
Python实战之网络与爬虫篇-----如何查看用户Star了哪些库 1.问题求解 试着用前面所学的知识查看用户Codingchaozhang 都Starred了哪些库,并且自动在游览器中打开这些库的 ...
- swift_035(Swift之第三方库Kingfisher篇)
[快速学会Swift第三方库] Kingfisher篇 Kingfisher是一个轻量的下载和缓存网络图片库.下载和缓存是异步进行操作,已经下载好的图片会缓存在内存和本地,极大得提高app的体验. ( ...
- 网易云音乐网络库跨平台化实践
导读: 2021年10月21日,「QCon 全球软件开发大会」在上海举办,网易智企技术 VP 陈功作为出品人发起了「AI 时代下的融合通信技术」专场,邀请到网易云信.网易音视频实验室.网易云音乐的技术 ...
- 发布一个基于 Reactor 模式的 C++ 网络库
发布一个基于 Reactor 模式的 C++ 网络库 陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice 2010 Aug 30 本文主要介绍 muduo 网 ...
- Android网络库的比较:OkHTTP,Retrofit和Volley [关闭]
本文翻译自:Comparison of Android networking libraries: OkHTTP, Retrofit, and Volley [closed] Two-part que ...
- iOS 网络优化: 使你的 App 网络交互更流畅
此文转载自:https://my.oschina.net/SwiftOldDriver/blog/4693520 大咖揭秘Java人都栽在了哪?点击免费领取<大厂面试清单>,攻克面试难关~ ...
- 国产网络库libhv开源四周年回顾
libhv是一个跨平台的c/c++网络库,本文写在libhv开源四周年之际,借机回顾了libhv的发展历程. github地址:https://github.com/ithewei/libhv 文章目 ...
- 偷师饿了么:怎样用HTTP/2优化iOS APP网络层次架构?
" HTTP/2,是HTTP协议发布后的首个更新,于2015年2月17日被批准.它采用了一系列优化技术来整体提升HTTP协议的传输性能,如异步连接复用.头压缩等等,可谓是当前互联网应用开发 ...
- muduo网络库:18---muduo简介之(muduo库的由来、编译安装、目录结构、代码结构、线程模型)
一.由来 2010年3月陈硕先生写了一篇<学之者生,用之者死--ACE历史与简评>(文章参阅:https://blog.csdn.net/Solstice/article/details/ ...
最新文章
- 企业中常用的几种文件传输方法介绍
- 智源研究院发布“源创计划”,助力人工智能创业项目加速
- OutOfMemoryError/OOM/内存溢出异常实例分析--堆内存溢出
- 中国程序员容易发音错误的单词
- 使用HOG+LBP实现动物分类:matlab版本
- mysql按照日期先去重在分组_【巨杉数据库Sequoiadb】【咨询】【数据操作】【聚集查询】在执行聚集查询时,字符类型的字段能否按照实际内容进行分组去重...
- MTK 驱动开发(2)---GPIO 配置
- 【IT】C语言函数中怎么返回一个二维数组
- 管道pipe与dup结合使用,应用实例
- 游戏蛮牛Egret游戏引擎视频教程
- 微云存储空间多大_微云用户容量调整多少了 微云用户容量变小了是吗
- pandas 错误 ValueError: ‘Lengths must match to compare‘
- 简述5G技术在远程医疗应用
- vdi虚拟服务器,VMware VDI部署攻略之三:VDI安装及配置
- JavaSE——IO流
- 6-18位包含数字字母,大小写,特殊字符,正则表达式
- yocto源码下载和目录分析
- java求质因数算法
- c语言read有什么作用,c语言read函数读到什么结束
- 想炒期货是如何开户的?