Android 注解、反射、Apt原理

注解、反射、代理模式:

Java:注解和反射 - opendragonhuang - 博客园

策略模式

  1. 定义一个接口IA,方法为a()
  2. 定义N个接口实现类:B,C,D...
  3. 分别在B、C、D的a()中实现不同的操作逻辑
  4. 在外部调用时,传入new B()或new C()或new D(),达到不同的实现结果

SPI机制

服务发现机制,需结合策略模式使用;

可以不用new实现类;

用在了javac的APT注解处理工具进行自定义实现类的发现;

  1. 在某个路径下,创建一个文件F
  2. 在F文件中的每一行,写入每个接口实现类的全类名:com.xxx.xx.B \n com.xxx.xx.C
  3. 使用时,用过IO读文件F,每次读一行
  4. 将读到的类名通过反射创建出来放入迭代器;通过IA ia= Class.froName("com.xxx.xx.B").newInstance();
  5. 迭代器循环调用ia.a(); 可实现所有已在F文件中注册的服务的实现;

OkHttp

请求时,使用责任链模式;

同时支持最大5个不同域名的64个并发请求;

有立即请求队列,和等待队列;

超过64个,会放入等待队列;

用户没有自定义拦截器时,会“过5关”;

有自定义拦截器时,会“过6或7关”(第1层的自定义拦截器,和第6层的自定义拦截器);

  1. 自定期拦截器:用户添加或校验参数,做处理
  2. 重试重定向拦截器:请求时地址重定向了,判断重定向的地址是否正确,不正确不去请求
  3. 桥接拦截器:校验域名,不正确不去请求
  4. 缓存拦截器:有缓存且在缓存时效内,就不去请求接口了
  5. 连接拦截器:获取服务器协议版本,并找到自己合适的版本,没有则不去请求了
  6. 自定义拦截器:请求前,用户再次校验参数,做处理
  7. 网络拦截器:做请求

Retrofit流程

  1. 通过建造者模式创建Retrofit:创建了一个主线程Handler(Looper.getMainLooper()),并存了起来
  2. 调用create创建匿名动态代理
  3. 调用接口方法时,从缓存中查找
  4. 没有缓存则解析方法上的注解和参数注解,进行Url拼接
  5. 执行enqueue():交给Okhttp,RealCall调用线程池做请求
  6. 返回数据时,用缓存的主线程Handler切回主线程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值