Android技术知识Android开发经验谈开源项目

从零开始仿写一个抖音App——app架构更新与网络层定制

2018-10-07  本文已影响2661人  何时夕

本文首发于简书——何时夕,搬运转载请注明出处,否则将追究版权责任。交流qq群:859640274

本项目的 github 地址:MyTikTok

国庆快结束了,国庆中有六天都在写文章看代码还有比我苦逼的吗(买个惨,哈哈)。这几天为项目新增了五个模块,顺便看了看 kotlin 的语法并在项目中简单的实践了一下。本文中会讲解其中的两个模块,剩下的一些会在不久后发布的下一篇文章中进行讲解。

一、讨论

讨论1:zsh 对 bash 的支持并不是完全的,如果运行纯 bash 有时候会出问题建议不要在服务器上用。

讨论2:我以为 aop 是通过 aspectjrt 来实现的 原来是和 Butterknife 类似来实现的

讨论3:建议以已完成某个功能模块或者某篇文章为版本,创建不同的tag,这样利于食用。(github 上面的 issue)

二、app架构更新

我想看过本系列第二篇文章的同学都看过本项目的模块架构图。距离写下本项目的第一行代码到现在已经差不多三个月过去了,这个过程中项目中增加了很多模块,我对大的项目的把握程度也加深了许多,所以这一节我更新一下 app 的架构。

图1:app 架构图.png

我接下来就按照图1开始讲解,标了红色的小模块表示已经进行过开发的模块

三、网络层定制

现在 okhttp + retrofit,也许是一个新项目的标配了,但是很多人都只是在使用这两个库的最基本的功能,殊不知这两个库可以通过定制来实现更多的功能。这一节我就来讲讲如何基于这两个库来定制一个大项目的网络请求层。中间会穿插着一些原理的讲解。

1.网络层请求流程

图2:网络层定制图.png

接下来我会按照图2开始讲解 okhttp + retrofit 整个请求流程,待读者对整个流程有所了解之后再讲定制的代码,这样会事半功倍。

图3:Retrofit#create.png 图4:RxJava2CallAdapterFactory#get.png 图5:RxJava2CallAdapter#adapt.png 图6:CallExecuteObservable#subscribeActual.png 图7:OkHttpCall#execute.png

2.网络层定制代码

所谓定制就是在网络请求流程的各个主要节点中添加自己的代码实现以达到特殊的需求。经过前面的讲解,我想读者应该对整个网络层的请求流程有了一个大致的了解。这时我们可以再看看图2,可以看见其中有几处我绿色的框,这几个地方就是我们可以添加定制代码的地方。接下来我就会按顺序讲解一下这几处的定制代码是如何实现的。

图8:RetrofitFactory.png 图9:DefaultRetrofitConfig.png

(1)retrofit2.Call的装饰

我们按请求顺序可以在图2中首先看见的是 NewCall.execute 这个框,接下来我就来说说这个可以怎么定制。

图10:DataContainer.png 图11:DataContainerCall.png

(2)OkhttpClient定制

按顺序下来,第二个定制的地方就是 OkhttpCall 调用 okhttp.RealCall 的地方了。

(3)Converter定制

(4)CallAdapter定制

(5)网络层定制代码总结

上面就是在网络请求的四个主要节点进行定制的方式。其实总结起来比较简单:1是扩展 Retrofit 返回的结果、2是扩展 okhttp 请求和返回、3是解析 okhttp 返回给 Retrofit 的结果、4是增强对 Retrofit 返回结果的处理。

四、总结

不知不觉已经写了这么多了,本来以为还可以写一节 Fresco 的定制,现在看来只能放在下一篇文章了。在这里预告一下:从零开始仿写一个抖音App这一系列的文章大概还有一到两篇 android 层面的文章,并且会在接下来的一周左右放出。

这一阶段结束之后我的文章和学习重心将会转向音视频这块。这几个月过来虽然有时候文章会 delay,但最终我也信守承诺没有弃坑。最后希望大家能持续关注本系列,毕竟我都已经这么努力了不是:)

连载文章

上一篇下一篇

猜你喜欢

热点阅读