ModuleDecoupling
背景
随着Android APP业务需求的不断迭代,业务功能越来越多,代码量也越来越多,组件间难免会因为方法功能调用页面访问等场景存在相互访问依赖耦合。为此,探索一种可行方案彻底解决组件模块间耦合同时还能满足组件间相互通信访问显得十分必要。经过不断努力探索调研结合过去工作经验项目总结推出本方案。
本方案技术原理如下:
1.组件分两个部分,Module级的接口和对应接口实现Module,达到接口和实现类Module级别的隔离;
2.组件间依赖不在直接依赖实现类Module,而只需依赖其Module接口;
3.通过编译时注解标注具体接口实现类,编译时注解处理器Processor来写实现类class路径文件;
4.app启动运行时通过SPI技术ServiceLoader根据步骤3生成的配置文件将对应的接口和实现类Class作为key,value值注册进公共组件管理模块CmptServiceManager中,而该过程中公共组件是不需要依赖任何组件;
5.当组件a需要使用组件b提供能力时,只需通过公共组件管理类CmptServiceManager.getInstance().getComponmentService(IComponmentBService.class)方法就可以从组件管理模块中拿到组件b的实现类,从访问其接口实现;