自己重新整理了一份网络框架比较,对比了多个框架。目前使用的比较多的volley、okhttp、retrofit,从官网找了资料,
根据demo和总结,最终形成了表格。项目中volley部分机型、特定网络就会卡顿,特别慢。retrofit要定义接口,建议和rxjava一起使用,看是否习惯,是否容易上手。推荐使用okhttp,方便封装调用。
安卓网络框架比较 | ||||
说明:网络请求框架比较多,现阶段使用比较多、不断更新的框架推荐Volley,Okhttp,Retrofit。网络基础工具HttpUrlConnection,android-async-http功能简单,需要自己封装;httpclient(安卓高版本已废弃,不再使用),xUtils3(作用广泛而不精,已停止维护),这几个不推荐使用。 | ||||
框架名称 | 开发公司 | 官方说明 | 优点 | 缺点 |
volley | 1.网络请求的自动调度。 2.多个并发网络连接。 3.具有标准HTTP缓存一致性的透明磁盘和内存响应缓存。 4.支持请求优先级。 5.取消请求API。您可以取消单个请求,也可以设置要取消的请求块或范围。 6.容易定制,例如,重试和后退。 7.强排序,使正确地使用从网络异步获取的数据填充UI变得容易。 8.调试和跟踪工具。 | 1. 扩展性强,基于接口设计。 2. 一定程度上符合http规范。返回包ResponseCode 的处理,请求头的处理,缓存机制的支持。 3. 重试以及优先级的定义。 4. 提供简单的图片加载工具。 5.jar包较小,减小包体积。 | 1.不适合大的下载或者流式传输操作 2.不支持okio机制, 3.不支持重连机制,部分情况下请求会很慢甚至卡顿。 | |
okhttp | Square | 1.HTTP是现代应用程序网络的方式。有效地使用HTTP将使您的内容加载速度更快,并节省带宽。 2.OkHttp是一个HTTP客户端,默认情况下是高效的。 3.HTTP/2支持允许对同一主机的所有请求共享一个socket。 4.连接池减少了请求延迟(如果HTTP/2不可用)。 5.透明GZIP缩小了下载大小。 6.响应缓存完全避免了网络对重复请求的访问。 7.当网络出现问题时,OkHttp会坚持下来:它会从常见的连接问题中安静地恢复。如果您的服务有多个IP地址,那么如果第一次连接失败,OkHttp将尝试替换地址。 | 1.支持GZIP压缩机制。 2.底层实现了OKIO机制,读写操作更高效。 3.支持统一主机所有请求共享socket 4.当网络出现问题,会在多个服务器之间切换地址,优化网络加载速度。 | 1.是消息回来需要切到主线程,主线程要自己去写。 2.调用比较复杂,需要自己进行封装。 3.缓存失效:网络请求时一般都会获取手机的一些硬件或网络信息,比如使用的网络环境。同时为了信息传输的安全性,可能还会对请求进行加密。在这些情况下OkHttp的缓存系统就会失效了,导致用户在无网络情况下不能访问缓存。 |
Retrofit | Square | Retrofit是对okhttp封装的网络框架,Android和Java的类型安全HTTP客户端。 | 1.可以配置不同HTTP client来实现网络请求,如okhttp、httpclient等; 2.请求的方法参数注解都可以定制; 3.支持同步、异步和RxJava; 4.超级解耦; 5.可以配置不同的反序列化工具来解析数据,如json、xml等; | 1.不能接触序列化实体和响应数据; 2.执行的机制太严格; 3.使用转换器比较低效; 4.只能支持简单自定义参数类型; 5.大量使用注解,效率会降低。 |