藏书阁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 的支持
  • 缺点:

    • 基于注解实现

      • 扩展非常困难,比如说加密信息。
    • 依赖 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-网络库选型篇相关推荐

  1. Python实战之网络与爬虫篇-----如何查看用户Star了哪些库

    Python实战之网络与爬虫篇-----如何查看用户Star了哪些库 1.问题求解 试着用前面所学的知识查看用户Codingchaozhang 都Starred了哪些库,并且自动在游览器中打开这些库的 ...

  2. swift_035(Swift之第三方库Kingfisher篇)

    [快速学会Swift第三方库] Kingfisher篇 Kingfisher是一个轻量的下载和缓存网络图片库.下载和缓存是异步进行操作,已经下载好的图片会缓存在内存和本地,极大得提高app的体验. ( ...

  3. 网易云音乐网络库跨平台化实践

    导读: 2021年10月21日,「QCon 全球软件开发大会」在上海举办,网易智企技术 VP 陈功作为出品人发起了「AI 时代下的融合通信技术」专场,邀请到网易云信.网易音视频实验室.网易云音乐的技术 ...

  4. 发布一个基于 Reactor 模式的 C++ 网络库

    发布一个基于 Reactor 模式的 C++ 网络库 陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice 2010 Aug 30 本文主要介绍 muduo 网 ...

  5. Android网络库的比较:OkHTTP,Retrofit和Volley [关闭]

    本文翻译自:Comparison of Android networking libraries: OkHTTP, Retrofit, and Volley [closed] Two-part que ...

  6. iOS 网络优化: 使你的 App 网络交互更流畅

    此文转载自:https://my.oschina.net/SwiftOldDriver/blog/4693520 大咖揭秘Java人都栽在了哪?点击免费领取<大厂面试清单>,攻克面试难关~ ...

  7. 国产网络库libhv开源四周年回顾

    libhv是一个跨平台的c/c++网络库,本文写在libhv开源四周年之际,借机回顾了libhv的发展历程. github地址:https://github.com/ithewei/libhv 文章目 ...

  8. 偷师饿了么:怎样用HTTP/2优化iOS APP网络层次架构?

    "  HTTP/2,是HTTP协议发布后的首个更新,于2015年2月17日被批准.它采用了一系列优化技术来整体提升HTTP协议的传输性能,如异步连接复用.头压缩等等,可谓是当前互联网应用开发 ...

  9. muduo网络库:18---muduo简介之(muduo库的由来、编译安装、目录结构、代码结构、线程模型)

    一.由来 2010年3月陈硕先生写了一篇<学之者生,用之者死--ACE历史与简评>(文章参阅:https://blog.csdn.net/Solstice/article/details/ ...

最新文章

  1. 企业中常用的几种文件传输方法介绍
  2. 智源研究院发布“源创计划”,助力人工智能创业项目加速
  3. OutOfMemoryError/OOM/内存溢出异常实例分析--堆内存溢出
  4. 中国程序员容易发音错误的单词
  5. 使用HOG+LBP实现动物分类:matlab版本
  6. mysql按照日期先去重在分组_【巨杉数据库Sequoiadb】【咨询】【数据操作】【聚集查询】在执行聚集查询时,字符类型的字段能否按照实际内容进行分组去重...
  7. MTK 驱动开发(2)---GPIO 配置
  8. 【IT】C语言函数中怎么返回一个二维数组
  9. 管道pipe与dup结合使用,应用实例
  10. 游戏蛮牛Egret游戏引擎视频教程
  11. 微云存储空间多大_微云用户容量调整多少了 微云用户容量变小了是吗
  12. pandas 错误 ValueError: ‘Lengths must match to compare‘
  13. 简述5G技术在远程医疗应用
  14. vdi虚拟服务器,VMware VDI部署攻略之三:VDI安装及配置
  15. JavaSE——IO流
  16. 6-18位包含数字字母,大小写,特殊字符,正则表达式
  17. yocto源码下载和目录分析
  18. java求质因数算法
  19. c语言read有什么作用,c语言read函数读到什么结束
  20. 想炒期货是如何开户的?

热门文章

  1. Ubuntu联网设置
  2. IntelliJ IDEA 2022.1 正式发布:加强依赖分析器,冲突解决更方便
  3. 北京ITSS认证流程
  4. 软件测试体系学习及构建(13)-测试基础之测试工程师的基本要求
  5. ZDHC认证是什么?
  6. 电磁波,和光成像原理
  7. Tampermonkey(油猴)去除谷歌翻译换行符脚本
  8. 支付宝商户支付接口接入流程
  9. java版微信分享功能(支持分享给好友/分享到朋友圈)
  10. n1ctf(部分复现)