Retrofit2源码解析
Posted ChuckChenLw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Retrofit2源码解析相关的知识,希望对你有一定的参考价值。
最近项目将网络框架换成Retrofit2.0.2,文中说的Retrofit都是指的Retrofit2这里要说明一下,毕竟和Retrofit1差别还是蛮大的,结合Okhttp,RxJava还是比较好用的,网上有很多前辈介绍过使用方法,本文是想研究一下Retrofit的源码。关于Retrofit的介绍可以查阅Retrofit的官方网站
直接进入主题:(注本文是结合RxJava介绍的,最好可以了解一下RxJava不了解也没有关系,大部分的思想是一样的)
Retrofit的基本使用
Retrofit使用是非常简单的,在上边的官网上介绍的也非常详细。但是为了后边的分析,还是把使用的代码贴在这儿:
一般在项目中会将需要请求网络方法写在一个接口中,如下:
public interface GitHubService {
@GET("users/{user}/repos")
Observable<List<Repo>> listRepos(@Path("user") String user);
}
如果要使用Retrofit还需要构建Retrofit的对象:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
主要就是配置baseUrl,ConverterFactory,CallAdapterFactory。这里用的是Gson,和RxJava所以相应的就是GsonConverterFactory,RxJavaCallAdaperFactory这个在后边的源码分析中会用到。
最后直接调用就可以了:
GitHubService service = retrofit.create(GitHubService.class);
service.listRepos("octocat")
.observeOn(androidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(list->{
if(list!=null){
//TODO 取得数据后逻辑处理
}
});
可以说,代码还是非常简洁的。用起来也很容易上手。
Retrofit工作流程
如上面的使用中我们可以看到:
1.通过Retrofit.Builder().build()构建Retrofit实例。
2.调用Retrofit的create()方法将生成接口GitHubService的实例。
3.调用GitHubService的listRepos()方法返回Observable<List<Repo>>
,这里的GitHubService实例实际上是个代理对象,这个下文再说。
下图是我整理的Retrofit运行时主要节点的时序图,当然不是所有的过程都反映出来了。
看不懂没关系,一步一步来,先看看Retrofit源码的构成:
以上是关于Retrofit2源码解析的主要内容,如果未能解决你的问题,请参考以下文章