Retrofit VS OkHttp,谁是最强网络开发框架?

Posted 涂程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Retrofit VS OkHttp,谁是最强网络开发框架?相关的知识,希望对你有一定的参考价值。

毫无疑问,OkHttp的横空出世,让其他网络请求框架都黯然失色。它是一个高效的HTTP客户端,作为目前android开发中最为广泛使用的网络框架。不得不说OkHttp是真的强大真的香。

但在实际的项目开发过程中,这个框架也给开发者们留下了不少问题:

  • 无法适配自动进行线程的切换,消息回来需要切到主线程,主线程要自己去写。
  • 调用比较复杂,需要自己进行封装。
  • 用户网络请求的接口配置繁琐,尤其是需要配置请求body,请求头,参数的时候;
  • 数据解析过程需要用户手动拿到responsbody进行解析,不能复用;
  • 缓存失效:网络请求时一般都会获取手机的一些硬件或网络信息,比如使用的网络环境。同时为了信息传输的安全性,可能还会对请求进行加密。在这些情况下OkHttp的缓存系统就会失效了,导致用户在无网络情况下不能访问缓存。

但Retrofit的出现可谓是雪中送炭,通过在OkHttp的基础上进行封装,切实解决了这些问题,让我们在网络框架开发上更加的游刃有余。

Retrofit对OkHttp做了什么

Retrofit是一个非常强大的封装框架,可以配置不同HTTP client来实现网络请求,如okhttp、httpclient等;可以定制请求方法的参数注解;可以同步或异步RxJava;轻松实现超级解耦;配置不同的反序列工具来解析数据,而且设计模式颇多,使用非常方便灵活:

stay大神整理的Retrofit源码流程图

网络请求的工作本质上仍旧是 OkHttp 完成,Retrofit 负责网络请求接口的封装,并没有改变网络请求的本质,因为OkHttp已经足够强大。Retrofit的封装则是让我们更加游刃有余,里面涉及到非常丰富的设计模式,通过注解直接配置请求,可以使用不同的http客户端,虽然默认用http,但是可以通过不同的Json Converter 来序列化数据,同时对RxJava提供支持。

Retrofit + OkHttp + RxJava是目前比较潮的一套框架。但这套框架其实是有一定门槛的,尤其是Retrofit的核心原理掌握。和OkHttp一样,Retrofit现在也是大厂面试的必会问题之一:

诸多面试官也会在这部分打出连环重拳:

  • Retrofit 是如何工作的
  • 用过哪些网络加载库?Retrofit核心实现原理?
  • 如果让你实现Retrofit的某些核心功能,你会考虑怎么去实现?
  • Retrofit的注解是怎么解析的 ?
  • Retrofit网络请求层用的什么?
  • Retrofit中使用了哪些设计模式?
  • Retrofit在OkHttp上做了哪些封装?动态代理和静态代理的区别,是怎么实现的?
  • Android开发Repository层如何拿到retrofit返回的数据?
  • Retrofit也用apt去做是否可行?为什么不用apt而用动态代理?

怎么快速的深入了解Retrofit源码层原理?

《深入Retrofit网络实现源码分析及深度解析OKhttp实现原理》

《Android百大框架源码解析》

《从OkHttp源码解读到手写网络访问框架》

上述视频中有对Android 网络框架进行讲解,大家可以去参考学习。

《Android百大框架源码解析》知识点归纳已整理至GitHub,大家可以点击下方小卡片进行参考学习。

以上是关于Retrofit VS OkHttp,谁是最强网络开发框架?的主要内容,如果未能解决你的问题,请参考以下文章

带你一步步剖析Retrofit 源码解析:一款基于 OkHttp 实现的网络请求框架

Kevin Learn RecyclerView--> Retrofit + RxJava + OkHttp 网络请求

Android OkHttp + Retrofit 取消请求的方法

retrofit2+rxjava+okhttp网络请求实现

Android网络框架之Retrofit + RxJava + OkHttp 变化的时代

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