android控件复用,Android组件化你了解多少?

前言

组件化作为Android客户端技术的一个重要分支,近年来一直是业界积极探索和实践的方向。

为什么要组件化

近年来,为什么这么多团队要进行组件化实践呢?组件化究竟能给我们的工程、代码带来什么好处?我们认为组件化能够带来两个最大的好处:

提高组件复用性

可能有些人会觉得,提高复用性很简单,直接把需要复用的代码做成Android Module,打包AAR并上传代码仓库,那么这部分功能就能被方便地引入和使用。但是我们觉得仅仅这样是不够的,上传仓库的AAR库是否方便被复用,需要组件化的规则来约束,这样才能提高复用的便捷性。

降低组件间的耦合

我们需要通过组件化的规则把代码拆分成不同的模块,模块要做到高内聚、低耦合。模块间也不能直接调用,这需要组件化通信框架的支持。降低了组件间的耦合性可以带来两点直接的好处:第一,代码更便于维护;第二,降低了模块的Bug率。

组件间如何通信

组件间通过接口通信。为每一个组件定义一个或者多个接口,简单起见,我们假定只为每一个组件定义接口(多个接口是类似的)。

便于理解,还是要举实例。假设当前存在两个组件UserManagement(用户管理)和OrderCenter(订单中心),我们为组件接口定义的模块的名为ComponentInterface。UserManagement和OrderCenter都依赖于ComponentInterface。为了有个直观的感受,还是放张图:

00db74d07ac7

在ComponentInterface模块中新建为组件UserManagement的定义接口:

public interface UserManagementInterface

{

//获取用户ID

String getUserId();

}

UserManagement实现ComponentBInterface:

public class UserManagementInterfaceImpl implements UserManagementInterface

{

@Override

public String getUserId()

{

return "UID_XXX";

}

}

现在假定OrderCenter组件需要从UserManagement获取用户ID以便加载该用户的订单列表。那么问题来了,OrderCenter怎么才能调用到UserManagement的组件实现呢?这个问题可以通过反射来解决,只是需要满足组件的接口和组件接口的实现的路径和名称满足一定的约束条件。

我们定义组件接口和其实现的路径和名称的约束条件如下:

1.组件的接口和组件接口的实现必须定义在同一个包名下。

2.组件接口的实现的类名可以通过组件的接口的类名推导出来。比如每一个接口的实现的类名都是在该接口的名称后面接上“Impl”。

那么现在,我们的工程目录大概就像这个样子:

00db74d07ac7

接下来,在OrderCenter组件中就可以通过反射获取到UserManagement组件接口的实现了,我们定义一个ComponentManager类:

public class ComponentManager

{

public static T of(Class tInterface)

{

String interfaceName = tInterface.getCanonicalName();

String implName = interfaceName + "Impl";

try

{

T impl = (T) Class.forName(implName).newInstance();

return impl;

}

catch (Exception ex)

{

ex.printStackTrace();

return null;

}

}

}

然后在OrderCenter就可以通过ComponentManager来获取UserManagement的组件接口实现了:

String userId = ComponentManager.of(UserManagementInterface.class).getUserId();

至此,组件间通信的问题就算解决了,而且组件之间还是不存在强依赖。

组件的代码如何隔离

由于组件之间是不能相互直接依赖,所以组件间也不存在代码隔离的问题。问题主要出现在App壳上,App壳依赖了所有的组件,如果采用implementation依赖方式,在App壳中还是能够访问组件中的代码的,我们可以采用runtimeOnly这种依赖方式。

其实组件化 还有很多很多知识需要探索

如:组件的资源如何隔离

渐进式组件化

组件如何单独运行

页面跳转

附《Android核心知识笔记2020》分享

前段时间我和圈子里的几位架构师朋友一起闲聊时的突发奇想,我们在学习Android开发的时候或多或少也受到了一些前辈的指导,所以想把这份情怀延续下去。三个月后,这套资料就出来了,需要这份资料的朋友加Android学习交流群1049273031即可获取。

00db74d07ac7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值