zoukankan      html  css  js  c++  java
  • 开源框架相关面试问题-retrofit网络框架面试问题讲解

    retrofit使用简介:

    • 在retrofit中通过一个接口作为Http请求的api接口。

      注意:@GET("url")中的url只是一个路径,不包含主机号的。
    • 创建一个retrofit实例。 
    • 调用api接口。

    retrofit源码剖析:

    首先通过Builder模式来创建Retrofit对象,如下:

    接着就是将咱们定义的接口转换成实例进行请求,究境它是怎么转换的呢,点击进去查看一下create()方法:

    其中会回调invoke()方法,接着最核心的三行代码就出现了:

    查看一下loadServiceMethod的具体实现:


    再回到主流程来:

    这个分析流程跟createCallAdapter()方法类似,就不分析了,回到解析我们api的方法上来:

    而看一下adapt()的具体实现:

    呃,空的,那肯定在它的子类,其实是在ExecutorCallAdapterFactory类中,然后它里面有个同步也有个异步请求,咱们看下异步请求的细节:

    所以最终还是会调用到OkhttpCall的enqueue()方法:

    所以~~其实都可以看到retrofit底层实现就是靠okhttp来实现的。

    最后对动态代理这块进行总结一下:

    • 首先,通过Method把它转换成ServiceMethod;
    • 然后,通过serviceMethod,args获取到okHttpCall对象;
    • 最后,再把okHttpCall进一步封装并返回Call对象;
  • 相关阅读:
    内置函数02
    生成器
    OpenJudge 2979 陪审团的人选 / Poj 1015 Jury Compromise
    OpenJudge/Poj 1936 All in All
    模板:各类型的最大数和最小数表示
    OpenJudge/Poj 1661 帮助 Jimmy
    OpenJudge/Poj 1915 Knight Moves
    OpenJudge 2757 最长上升子序列 / Poj 2533 Longest Ordered Subsequence
    OpenJudge/Poj 1163 The Triangle
    OpenJudge/Poj 1844 Sum
  • 原文地址:https://www.cnblogs.com/webor2006/p/8997381.html
Copyright © 2011-2022 走看看