本质

对 OkHttp 的封装。
实现方式:动态代理
核心:ConverterFactory,CallAdapterFactory
引入:

  1. const val retrofit = "com.squareup.retrofit2:retrofit:$retrofitVersion"

CallAdapterFactory

常用的有 RxJava2CallAdapterFactory,RxJava3CallAdapterFactory

  1. const val adapterRxjava2 = "com.squareup.retrofit2:adapter-rxjava2:$retrofitVersion"
  2. const val adapterRxjava3 = "com.squareup.retrofit2:adapter-rxjava3:$retrofitVersion"

ConverterFactory

常用的有 GsonConverterFactory,MoshiConverterFactory,ProtoConverterFactory

  1. const val converterGson = "com.squareup.retrofit2:converter-gson:$retrofitVersion"
  2. const val converterMoshi = "com.squareup.retrofit2:converter-moshi:$retrofitVersion"
  3. const val converterProtobuf = "com.squareup.retrofit2:converter-protobuf:$retrofitVersion"

Retrofit

🐱 Retrofit - 图1

create(final Class service)

carbon (1).png

  1. 如果是 Object 的方法,如 toString() 等,则不代理
  2. 如果是默认方法(Java 8 Interface 支持 default method),则调用默认方法;否则走代理

OkHttpCall

🐱 Retrofit - 图3

createRawCall()

carbon (3).png
构建 OkHttp Call,此处的 callFactory 其实就是 OkHttpClient

parseResponse()

image.png
此处调用了 responseConverter 解析数据。

RequestFactory

🐱 Retrofit - 图6

Builder#parseMethodAnnotation

image.png

HttpServiceMethod

🐱 Retrofit - 图8