0
点赞
收藏
分享

微信扫一扫

【Android组件化】组件化中子模块交互方式

中间件小哥 2022-03-30 阅读 73


五种方法

【Android组件化】组件化中子模块交互方式_ide

前三种方法局限性较大,实际项目中使用已经比较少了,下面我将只会介绍 方法四 和 方法三 

方法四

效果展示

【Android组件化】组件化中子模块交互方式_ide_02

讲这个方法之前,我默认大家都会 组件化 配置了,所以下面直接展示我测试的项目结构:

【Android组件化】组件化中子模块交互方式_android_03

由于app和order/person都存在依赖关系,所以 app =》 MainActivity 跳转到 order =》OrderMainActivity 的方法如下:

public void toOrder(View view) {
Intent intent = new Intent(MainActivity.this, OrderMainActivity.class);
startActivity(intent);
}

由于order和person之间不存在依赖关系,所以无法直接跳转,我们可以尝试 类加载方式

public void toPerson(View view) throws ClassNotFoundException {
Class personClass = Class.forName("com.wust.person.PersonMainActivity");
Intent intent = new Intent(OrderMainActivity.this, personClass);
startActivity(intent);
}

这种类加载方式的实现本质在于,我们打包的apk里是存在这个类的,可以通过类加载机制加载Class实例。

【Android组件化】组件化中子模块交互方式_类加载_04

方法五


第一步:创建common基础库


【Android组件化】组件化中子模块交互方式_ide_05


第二步:创建 PathManage 类


package com.wust.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* ClassName: PathManage <br/>
* Description: <br/>
* date: 2022/1/29 21:21<br/>
*
* @author yiqi<br />
* @技术交流QQ群 928023749
*/
public class PathManage {

//存放路由表
public static Map<String, List<Map<String, Class>>> maps = new HashMap<>();

//向路由表中添加数据
public static void addPathInfo(String groupName, String pathName, Class pathClass) {
//根据组名获取 List 集合
List<Map<String, Class>> groupList = maps.get(groupName);
//判断是否存在这个组
if (null == groupList) {
//如果不存在这个组
groupList = new ArrayList<>();
maps.put(groupName, groupList);
} else {
//如果存在这个组 则判断是否存在这个class
for (Map<String, Class> item : groupList) {
Class targetClass = item.get(pathName);
System.out.println(targetClass.getSimpleName() + " Class 实例已存在");
if (null != targetClass) return;
}
}

//添加calss
Map<String, Class> tempMap = new HashMap();
tempMap.put(pathName, pathClass);

groupList.add(tempMap);
}

//根据组名和path名获取Class
public static Class getTargetActivity(String groupName, String pathName) {
//根据组名获取 List 集合
List<Map<String, Class>> groupList = maps.get(groupName);

if (null == groupList) return null;

for (Map<String, Class> item : groupList) {
Class targetClass = item.get(pathName);
if (targetClass == null) return null;
return targetClass;
}

return null;
}
}


第三步:app、order、person依赖common


【Android组件化】组件化中子模块交互方式_类加载_06


第四步:重写application并注册Class实例 


package com.wust.empty02;

import android.app.Application;

import com.wust.common.PathManage;
import com.wust.order.OrderMainActivity;
import com.wust.person.PersonMainActivity;

/**
* ClassName: MyApplication <br/>
* Description: <br/>
* date: 2022/1/29 22:48<br/>
*
* @author yiqi<br />
* @技术交流QQ群 928023749
*/
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
PathManage.addPathInfo("order", "OrderMainActivity", OrderMainActivity.class);
PathManage.addPathInfo("person", "PersonMainActivity", PersonMainActivity.class);
}
}


第五步:跳转


【Android组件化】组件化中子模块交互方式_android_07


举报

相关推荐

0 条评论