Retrofit 工作原理总结

Retrofit源码解析之请求流程概述
Retrofit之Converter简单解析
Retrofit之OkhttpCall执行原理详解
Retrofit之CallAdapter简单解析

基本上读完上面的几篇博文应该可以对Retrofit的核心原理做一个了解,本篇是对前面几篇博文的总结,从整体上来说明Retrofit的结构:

相信很多开发者在使用Okhttp的时候也对其进行过封装,github上也能搜到不少Okhttp封装的源码;总的来看Retrofit是Okhttp的二次封装。其实不论怎么封装,封装的核心只不过是对Request和Response的构建做一个相应的变化而已,到头来真正执行网络请求的还是Okhttp的Call对象:同步请求为call.execute();异步请求为call.enqueue();那么Retrofit对Okhttp做了怎么的封装设计呢?

其实Retrofit从整体上看主要添加了两个接口集合:

   .addConverterFactory(GsonConverterFactory.create(initGsonConverter()))// Converter集合
   .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) //CallAdapter集合
在这里插入图片描述

其中两个集合的作用通过下图可以直观的表达出来:


在这里插入图片描述

也即是说api方法的返回值类型决定了使用哪一个CallAdapter,而返回值所包含的泛型的真实类型决定了使用哪一个Converter。
或者说每个Api方法的返回类型都需要一个CallAdapter对象和一个Converter与之对应。且每一个API方法都对应封装成一个ServiceMethod对象,所以下图就不难理解了:

在这里插入图片描述

具体是怎么从上面两个集合中检索的所需的CallAdater和Converter对象的,详细过程可以参看Retrofit之Converter简单解析和Retrofit之CallAdapter简单解析两篇博文。

而Retrofit的扩展性也主要体现在CallAdapter和Converter两个接口的实现而已,比如Retrofit的内部就提供了如下CallAdapter:


在这里插入图片描述

和如下几个Converter

在这里插入图片描述

所以结合上面的讲解Retrofit的整体流程图就出炉了:


在这里插入图片描述

到此为止Retrofit源码分析讲解完毕,如有不当之处欢迎评指正

你可能感兴趣的:(Retrofit 工作原理总结)