相关文章
Android网络编程(一)HTTP协议原理
Android网络编程(二)HttpClient与HttpURLConnection
Android网络编程(三)Volley用法全解析
Android网络编程(四)从源码解析volley
Android网络编程(五)OkHttp2.x用法全解析
Android网络编程(六)OkHttp3用法全解析
Android网络编程(七)源码解析OkHttp前篇[请求网络]
Android网络编程(八)源码解析OkHttp后篇[复用连接池]
Android网络编程(九)Retrofit2前篇[基本使用]
Android网络编程(十)Retrofit2后篇[注解]
前言
最近博客的产出确实很少,因为博主我正在写一本Android进阶书籍,两头很难兼顾,但是每个月也得至少发一篇博客。上一篇我们介绍了Retrofit的使用方法,这一篇我们照例来学习Retrofit的源码。
1.Retrofit的创建过程
当我们使用Retrofit请求网络时,首先要写请求接口:
public interface IpService {
@GET("getIpInfo.php?ip=59.108.54.37")
Call<IpModel> getIpMsg();
接着我们通过调用如下代码来创建Retrofit:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.build();
Retrofit 是通过建造者模式构建出来的,接下来查看Builder方法做了什么:
public Builder() {
this(Platform.get());
}
很简短,查看Platform的get方法,如下所示。
private static final Platform PLATFORM = findPlatform();
static Platform get() {
return PLATFORM;
}
private static Platform findPlatform() {
try {
Class.forName("android.os.Build");
if (Build.VERSION.SDK_INT != 0) {
return new Android();
}
} catch (ClassNotFoundException ignored) {
}
try {
Class.forName("java.util.Optional");
return new Java8();
} catch (ClassNotFoundException ignored) {
}
try {
Class.forName("org.robovm.apple.foundation.NSObject");
return new IOS();
} catch (ClassNotFoundException ignored) {
}
return new Platform();
}
Platform的get方法最终调用的是findPlatform方法,根据不同的运行平台来提供不同的线程池。接下来查看build方法,代码如下所示。
public Retrofit build() {
if (baseUrl == null) {
//1
throw new IllegalStateException("Base URL required.");
}
okhttp3.Call.Factory callFactory = this.callFactory;//2