android进阶篇03AutoService组件化开发
Posted datian1234
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android进阶篇03AutoService组件化开发相关的知识,希望对你有一定的参考价值。
原文链接:https://juejin.cn/post/6960953337965445128
1、组件化架构图
在开发过程中,我们的app可能会包含很多module,在这种情况下,我们应该将各个module变成一个个组件;
App依赖所有组件层,组件层之间相互不依赖,所有组件再依赖common层,如果把网络层抽象出来,那么common层依赖network层,network层再去依赖base层,在依赖时灵活使用implementation和api;不能反向依赖,但可以跨层依赖,依赖关系如下图;
2、autoservice实现组件化开发
我们假设一下如果不使用组件化开发,那么在主app模块中启动各个组件模块,方法就是使用Intent直接调用startActivity,我们需要显示使用组件模块中的Activity类名,从而需要引入组件模块的Activity,这样各个模块之间耦合度较高;这里我们使用google官方提供的AutoService实现组件化开发,来消除这种高耦合;
1、接口下沉
我们将启动Activity的接口定义到Common层中,然后在需要的module中实现;
public interface IWebViewService {
void startWebViewActivity(Context context);
}
2、接口实现
我们在将接口实现放在在各个module中;然后加上@AutoService注解;
@AutoService(IWebViewService.class)
public class WebViewServiceImpl implements IWebViewService {
@Override
public void startWebViewActivity(Context context) {
if (context != null) {
Intent intent = new Intent(context, WebViewActivity.class);
context.startActivity(intent);
}
}
}
3、接口调用
我们在主app模块中可以通过ServiceLoader去查找接口的实现,然后查找到的实现是个集合,所以一般一个接口我们使用一个实现,这样方便使用;
IWebViewService webviewService = ServiceLoader.load(IWebViewService.class).iterator().next();
if(webviewService != null) {
webviewService.startWebViewActivity(MainActivity.this);
}
以上是关于android进阶篇03AutoService组件化开发的主要内容,如果未能解决你的问题,请参考以下文章
Android 组件化从入门篇到大厂(微信支付宝爱奇艺携程美团....)强化实战篇,Android 进阶必备