美文网首页新鲜
Retrofit 与Okhttp

Retrofit 与Okhttp

作者: lurenjia | 来源:发表于2018-03-24 01:41 被阅读742次
    1. OKhttp是个高效的网络求情框架,支持多种网络请求配置,支持同步和异步两种请求方法(同步请求通过call.execute()直接返回,异步请求是将将请求插入队列中,通过回调反回),支持拦截器处理(拦截器是对request和response的切面处理
      ),OKhttp支持缓存策略,OKhttp支付重连机制(如果当前来连接失败,会去检查RouteSelector有没有更多的route去连接,还会去恢复当前的连接等)

    2. Retrofit和OKhttp属于同一家公司# square
      是一款支持Restful API 的网络请求框架,通过注解的方式使得编写客户端代码更加简洁,同时Retrofit可以支持对返回的数据的多种解析方式,比如String,比如你自己的创建的实体,它也可以支持Rxjava。
      要说Retrofit的关系,那应该是Retrofit依赖于OKhttp,因为Retrofit的发送请求实际上就是用的OKhttp。
      下面看下Retrofit的源码,
      Retrofit是基于Java注解的请求框架,里面定义了各种注解,在retrofit2.http下面,比如说GET,POST,HTTP等。其实最主要的是Retrofit使用的动态代理 Proxy.newProxyInstance,动态代理这个鬼在调用声明的请求接口方法的时候起作用,这个时候就会解析我们声明在接口上的注解生成Method,就是下面这个方法

        ServiceMethod<Object, Object> serviceMethod = (ServiceMethod<Object, Object>) loadServiceMethod(method);
            OkHttpCall<Object> okHttpCall = new OkHttpCall<>(serviceMethod, args);
            return serviceMethod.adapt(okHttpCall);`
    

    这个方法中解析注解,获取参数类型等等一堆,看了好半天才看了个大概。
    下面真正发送请求的其实是OKhttpcall,就是我们上面代码中的okHttpCall,之后根据ServicceMethod和参数组合成一个Request对象,发送请求,等请求返回之后,再将response传入serviceMethod中,根据我们设置的ConverterFactory来生成一个Java对象。

    其实我们应该知道,使用注解的话其实效率很低的,虽然在Retrofit框架中对serviceMethod进行了缓存,只有第一次请求可能会慢点其他应该还好,那么为什么不考虑跟Butterknife似的,在编译的时候生成代码呢?

    相关文章

      网友评论

        本文标题:Retrofit 与Okhttp

        本文链接:https://www.haomeiwen.com/subject/jobfcftx.html