美文网首页
Retrofit源码分析

Retrofit源码分析

作者: hjfstory | 来源:发表于2020-04-06 12:32 被阅读0次

    一. 基本使用

    https://square.github.io/retrofit/#introduction

    //retrofit
    implementation 'com.squareup.retrofit2:retrofit:2.7.2'
    implementation 'com.squareup.retrofit2:converter-gson:2.7.2'
    implementation 'com.squareup.retrofit2:adapter-rxjava:2.7.2'
    
    Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl("https://www.weater.com/")
                    .addConverterFactory(GsonConverterFactory.create())
                    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                    .build();
            IWeather story = retrofit.create(IWeather.class);
            Call<ResponseBody> call = story.getWeather("202.202.33.33");
            call.execute();
            call.enqueue(new Callback<ResponseBody>() {
                @Override
                public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                }
                @Override
                public void onFailure(Call<ResponseBody> call, Throwable t) {
                }
            });
    
    网络请求流程

    App应用程序通过Retrofit请求网络,实际上是使用Retrofit接口层封装请求参数,之后由OkHttp完成后续的请求操作。在服务端返回数据之后,OkHttp将原始的结果交给Retrofit,Retrofit根据用户的需求对结果进行解析。

    二. Call对象

    问题:
    Retrofit的Call对象是OKHttp的RealCall对象吗?跟着代码来看看。

    1. 通过动态代理类执行请求。执行invoke方法返回结果,


    2. 在HttpServiceMethod类中实现了invoke方法,HttpServiceMethod类的作用是将接口方法的调用调整为HTTP调用。可以看到,在代码中创建了OKHttpCall,最最后调用了CallAdapter类实现的adapt方法,这个方法的作用是返回一个委托给Call对象的实例。


    3. 在DefaultCallAdapterFactory类中,adapt方法的实现。


    4. ExecutorCallbackCall类实现了Call接口,delegate对象是传过来的OkHttp中RealCall对象。我们知道,在OkHttp中调用异步返回数据后还是在子线程中,这里retrofit通过callbackExecutor将结果发送到了主线程中,在Android平台中用了Handler。



      通过代码分析,Retrofit在默认情况下Call对象是DefaultCallAdapterFactory.ExecutorCallbackCall。

    二. 动态代理

    代理类在程序运行时创建的代理方式。

    三. 设计模式

    建造者模式

    Retrofit对象通过Builder内部类来构建。

    观察者模式


    call对象是被观察者,Callback为观察者。

    外观模式

    定义:提供了一个统一接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。
    Retrofit类就应用了外观模式。

    工厂模式

    静态工厂方法

    CallAdapter也应用了工厂模式。

    策略模式

    CallAdapter类中的adapt方法,产生具体的实现。



    工厂模式强调的是生产不同的对象,策略模式强调的是不同对象策略方法的实现。

    适配器模式

    CallAdapter中的get方法,实现了切换线程的功能。
    addCallAdapterFactory

    相关文章

      网友评论

          本文标题:Retrofit源码分析

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