val retrofit = Retrofit.Builder()
.baseUrl("https://api.device.cn/")
.callFactory(OkHttpClient())
.build();
interface Api {
@GET("/user/detail")
fun userDetail(): Call<ResponseBody>
}
Call<ResponseBody> = retrofit.create(Api.class).userDetail();
Retrofit执行原理简述
Retrofit执行原理是,通过执行内部方法create作为接口请求的起始。进入通过执行动态代理生成接口对象,调用接口对象方法并回调动态代理的invoke方法。在回调invoke方法过程中,会解析接口对象方法的注解、方法参数注解、方法返回值类型并将解析内容封装成对象。待执行到ServiceMethod.invoke()时,Call对象执行同步/异步请求,使得okhttp的拦截器BridgeIntercdeptor通过chain.proceed(requestBuilder.build())传入request对象(通过已解析的注解内容所生成),然后执行最终的接口数据请求,并返回响应报文。
Retrofit执行源码拆解
执行Retrofit.Builder()…build();生成Retrofit对象时,在build方法中。 若callFactory我们未指定则默认使用OkHttpClient。 若callbackExecutor未指定则默认使用Handler。 若CallAdapterFactory未指定则默认使用DefaultCallAdapterFactory(使得响应报文,返回类型默认是Call<ResponseeBody> )
|