Retrofit面试

1、设计模式

  • 外观模式,
  • 构建者模式,
  • 工厂模式,
  • 代理模式,
  • 适配器模式,
  • 策略模式,
  • 观察者模式

2、Retrofit概括

Retrofit就是一个网络请求框架的封装,底层的网络请求默认使用的Okhttp,本身只是简化了用户网络请求的参数配置等,还能与Rxjava相结合,使用起来更加简洁方便。

  • App应用程序通过Retrofit请求网络,实际上是使用Retrofit接口层封装请求参数,之后由OkHttp完成后续的请求操作。
  • 在服务端返回数据之后,OkHttp将原始的结果交给Retrofit,Retrofit根据用户的需求对结果进行解析。
  • 完成数据的转化(converterFactory),适配(callAdapterFactory),通过设计模式进行各种扩展。

注意:Retrofit 通过 java 接口以及注解来描述网络请求,并用动态代理的方式生成网络请求的 request,然后通过 client 调用相应的网络框架(默认 okhttp)去发起网络请求,并将返回的 response 通过 converterFactorty 转换成相应的数据 model,最后通过 calladapter 转换成其他数据方式(如 rxjava Observable)

3、Retrofit 流程

1、添加Retrofit依赖,网络权限
2、定义接收服务器返回数据的Bean
3、创建网络请求的接口,使用注解(动态代理,核心)
4、 builder模式创建Retrofit实例,converter,calladapter…
5、创建接口实例,调用具体的网络请求
6、call同步/异步网络请求
7、处理服务器返回的数据

4、Retrofit网络通信八步骤

创建Retrofit实例
定义网络请求接口,并为接口中的方法添加注解
通过动态代理生成网络请求对象
通过网络请求适配器将网络请求对象进行平台适配
通过网络请求执行器,发送网络请求(call)
通过数据解析器解析数据
通过会掉执行器,切换线程
用户在主线程处理返回结果

5、Retrofit 优点

  • 可以配置不同 HTTP client 来实现网络请求,如 okhttp、httpclient 等;
  • 请求的方法参数注解都可以定制;
  • 支持同步、异步和 RxJava;
  • 超级解耦;
  • 可以配置不同的反序列化工具来解析数据,如 json、xml 等
  • 框架使用了很多设计模式

6、Retrofit 中的数据究竟是怎么处理的?它是怎么返回 RxJava.Observable 的?

Retrofit 中的数据其实是交给了 callAdapter 以及 converter 去处理,callAdapter 负责把 okHttpCall 转成我们所需的 Observable 类型, converter 负责把服务器返回的数据转成具体的实体类。

7、动态代理和静态代理的区别?

1、静态代理类由程序员创建或工具生成代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。

2、动态代理类是在程序运行期间由 JVM 根据反射等机制动态的生成,所以不存在代理类的字节码文件。代理类和委托类的关系是在程序运行时确定。


版权声明:本文为weixin_39069034原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。