Android组件化组件化中子模块交互方式
Posted 我想月薪过万
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android组件化组件化中子模块交互方式相关的知识,希望对你有一定的参考价值。
五种方法
前三种方法局限性较大,实际项目中使用已经比较少了,下面我将只会介绍 方法四 和 方法三
方法四
效果展示
讲这个方法之前,我默认大家都会 组件化 配置了,所以下面直接展示我测试的项目结构:
由于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实例。
方法五
第一步:创建common基础库
第二步:创建 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 1820762465
* @微信 yiqiideallife
* @技术交流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
第四步:重写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 1820762465
* @微信 yiqiideallife
* @技术交流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组件化组件化中子模块交互方式的主要内容,如果未能解决你的问题,请参考以下文章