您当前的位置: 首页 > 

郭梧悠

暂无认证

  • 1浏览

    0关注

    402博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Retrofit工作原理总结

郭梧悠 发布时间:2018-10-26 18:15:08 ,浏览量:1

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源码分析讲解完毕,如有不当之处欢迎评指正

关注
打赏
1663674776
查看更多评论
立即登录/注册

微信扫码登录

0.0409s