前文讲解了基本版组件化的大致实现目标,本文将讲解组件化的进阶
一、组件化标准版
这一阶段,主要围绕着两个目标来进行:
- 组件单独运行
- 组件引入方式可配置
1. 组件单独运行
背景
一般情况,我们在某一时间段,肯定是围绕着某一模块做需求迭代。
当项目过大,组件过多时,调试某一个功能也需要编译整个项目,然后通过多次操作才能进入到待调试页面,效率低下。
直接让组件单独调试就好了
怎么实现
一个独立app有三大件:
- app级gradle文件,配置applicationid、包名、证书等配置
- manifest清单文件
- 入口Activity
我们只需要在需要独立运行的组件增加这三大件即可,当然,它还不能忘本(它是一个组件,需要被壳工程当作模块引用),因此,需要通过配置,动态进行组件和app的转换
2. 组件能够以字节码的
背景
项目过大,组件过多时,全量编译项目巨慢
分析
记得在组件分层时,基础组件和功能组件变动频率较小。
调试某个功能时,其他业务组件也变动较小。
我们可以将这些不变组件提前编译为字节码,以字节码的形式依赖,不就大大降低了全量编译的代码量了吗
怎么实现
项目依赖方式有很多中,其中比较常用的就maven库依赖,本地module依赖。这两种方式就提供了解决问题的途径,具体实现步骤如下:
- 划分不变组件和易变组件
- 不变组件push到maven仓库
- 使用该组件的地方(一般是壳工程,也就是app模块),进行依赖方式判断,决策是依赖源码还是依赖字节码
打完,收工!
二、组件化进阶版
这一阶段,主要围绕两个目标来进行
- 组件生命周期管理
- 组件复用性进阶
1 组件生命周期管理
背景
目前主要的生命周期有两个:application(程序)、activity(页面)。
项目里各个组件、业务模块的初始化均围绕着这连个维度的生命周期做响应的初始化,其中,application的初始化最为严重,项目越大,越严重。
分析
既然使用了组件化,并且各个组件并不一定是程序初始化时就需要初始化该组件,能不能想办法让各个组件的初始化延迟到组件使用时。这样,即减轻了application的负担,也更加贴合了组件的高内聚。
怎么实现
- 定义一个仿application的组件生命周期接口:compositeLifecycle
- 各个组件增加组件生命周期接口的实现类
- 通过编译时注解的方式让Arouter识别它为生命周期管理类。
- 当首次加载该组件时,调用它的onInit方法。
- 当组件不再使用时,调用它的onDestroy方法
好处
- 减轻了application的负担
- 延迟加载,提高了app启动速度
- 自动回收,降低了内存暂用率
2. 组件复用性进阶
背景
有不少业务组件,其实是多项目通用的,但是又有些许的个性化定制需求
怎么实现
将组件也按照完整项目架构分层设计(MVC、MVP、MVVM等)。
提供页面层、逻辑层、数据层的个性化定制能力,通过建造者模式实现具体的定制意图传达。从而实现复用性进阶。
总结
到这里,组件化的所有实现目标均已讲解完毕。
可能有读者会疑惑,这一点代码都没有,怎么能算完毕呢!
在这里要说明以下,以上的这些讲解,均是实现思路,是组件化过程中的一些心得。就像武功秘籍的心法一样,至于招式(代码实现),后续我会持续更新,以demo的形式逐一呈现。
👀关注公众号:Android老皮!!!欢迎大家来找我探讨交流👀