为什么需要组件化?
在项目开发的过程中,随着版本的功能迭代,模块会越来越多,导致项目代码耦合度越来越高,逐渐难以维护。因此,组件化应运而生!
以下我只记录自己在组件化探索学习过程中的几个重要问题
组件化的问题:
- 组件间的页面跳转(这个网上已经有很多博文)
2.组件间的通信,方法的相互调用(这个网上很少有文章涉及,以下也会重点讲这个)
组件间页面的相互跳转
请自行去搜索查阅
组件间方法的相互调用
项目结构
我建立的工程结构是:base库组件,它被若干个功能组件所依赖,而若干个功能分组件被APP外壳所依赖,平级的功能组件间也可能会界面相互跳转或方法间相互调用。结构如下图:
工程结构示意图.png
工程结构.png
流程
从App外壳跳转到组件finger,然后再组件finger的界面调用pw组件的方法并返回结果呈现再finger组件的界面上
1.先在baseLibrary基础库下创建文件ExecuteMethodImpl和ExecuteMethod,代码如下:
/**
* Created By Aa
* on 2019/9/14
* 执行其他组件的方法
*/
public interface ExecuteMethodImpl extends IProvider {
String executeMethod();
}
/**
* Created By Aa
* on 2019/9/14
* 利用路由调用
*/
public class ExecuteMethod {
public static String executeAimMethod() {
ExecuteMethodImpl method = ARouter.getInstance().navigation(ExecuteMethodImpl.class);
if (method != null) {
String s = method.executeMethod();
return s;
} else {
return "";
}
}
}
image.png
2.在pw组件下创建文件PwTestExecutorMethod和ExecuteDetail,代码如下:
/**
* Created By Aa
* on 2019/9/14
*/
@Route(path = "/pw/executeMethod")
public class PwTestExecutorMethod implements ExecuteMethodImpl {
@Override
public String executeMethod() {
return ExecuteDetail.executeContent("{ 李二狗 }");
}
@Override
public void init(Context context) {
}
}
/**
* Created By Aa
* on 2019/9/14
* 目标方法执行的具体内容
*/
public class ExecuteDetail {
public static String executeContent(String params){
return "参数:"+params+",目标方法执行后返回的结果";
}
}
image.png
3.在组件finger的activity中调用组将pw中的目标方法,并呈现结果:
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(FingerActivity.this, "跨组件调用方法"
, Toast.LENGTH_SHORT).show();
// params.setText(MessageFormat.format("内容:{0}",
// PwFactory.getUserAddress("李二狗:")));
params.setText(ExecuteMethod.executeAimMethod());
}
});
依次的静态效果图如下:
app.png
finger.png
finger调用pw方法.png
开源示例项目包含组件化的配置
网友评论