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;不能反向依赖,但可以跨层依赖,依赖关系如下图;
image.png

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 进阶必备

Android自己定义组件系列——进阶实践

Android自己定义组件系列——进阶实践

Android 高级进阶(源码剖析篇)

android使用AutoService无法生成META-INF文件

Android Jetpack架构组件一文带你了解LiveData(使用篇)