阅读 1004

android进阶篇03、AutoService组件化开发

1、组件化架构图

在开发过程中,我们的app可能会包含很多module,在这种情况下,我们应该将各个module变成一个个组件;

App依赖所有组件层,组件层之间相互不依赖,所有组件再依赖common层,如果把网络层抽象出来,那么common层依赖network层,network层再去依赖base层,在依赖时灵活使用implementation和api;不能反向依赖,但可以跨层依赖,依赖关系如下图;

graph TD
APP --> 组件A
APP --> 组件B
APP --> 组件C
APP --> 组件D
组件A --> common
组件B --> common
组件C --> common
组件D --> common
common --> network
network --> base

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
文章标签