转载请标明地址:https://blog.csdn.net/gaolei1201/article/details/77601027
在组件化之前,业务发展不是很快的时候,这样是比较合适的,能一定程度地保证开发效率。
慢慢地代码量多了起来,开发人员也多了起来,业务发展也快了起来,或者由多个项目其实可以共用一些模块时,这时单一工程开发模式就会显露出一些弊端:
为了解决这些问题,就采取了「组件化」策略它能带来这些好处:
下面的这张图是项目依赖关系
由于组件化的内容网上资料较多,我来讲一些不一样的。模块化是用来降低耦合度,但是有时候难免会和其他模块有些交互(这也是自己在公司开发项目中遇到的) ,一个模块可以调用被依赖模块的类方法,而被依赖模型不能引入依赖模块类。简而言之就是,依赖只能单向,不能是双向,就算你想Android Studio也不让。但有时候被依赖的模块也需要一些依赖模块的数据怎么办?我就讲一下不同模块之间怎么交互的。
1.隐式Intent,要跳转的活动在Manifest.xml中声明,然后调用startActivity(new Intent(“com.example.boost”))
2. manifest.xml中活动的数据设计URI来接受跳转,然后调用startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse(“activity:// applock”)))。更多内容可了解路由器:https ://blog.csdn.net/zhaoyanjun6/article/details/76165252
3.利用反射
Class clazz=Class.fromName("com.clean.spaceplus.MainActivity")
startActivity(this,clazz);
如图4所示,可以看演示中的代码,就是把不同模块的一些类注册到一个都依赖的模块(如项目中的接口的ModuleDelegate),然后一个模块就可以电子杂志到其他模块的一些类对象,从而调用那个类的方法进行一些操作,如跳转一些活动。
下面是ModuleDelegate来注册不同模块的一些类,供其他模块调用
public class CleanDelegate {
private final Map factoryMap = new HashMap<>();
private static final CleanDelegate mInstance = new CleanDelegate();
private CleanDelegate() {
}
public static CleanDelegate getInstance() {
return mInstance;
}
public static void register(String key, IDelegateFactory factory) {
mInstance.factoryMap.put(key, factory);
}
public Bundle getData(String factoryCode, int code, Bundle args, Object... extras) throws DelegateException {
IDelegateFactory factory = factoryMap.get(factoryCode);
if (factory != null) {
IDataDelegate transfer = factory.getDataTransfer(code);
if (transfer != null) {
return transfer.getData(args, extras);
}
}
throw new DelegateException("unknow data transfer");
}
}
4. 推荐使用阿里开源第三方框架ARouter,详情可搜索相关文章
1. 推荐使用第三方框架EventBus,详情可搜索相关文章
2. 通过Arouter
演示地址:https://github.com/gaoleicoding/Modularization,https://github.com/gaoleiandroid1201/MultiModuleInteraction