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组件化组件化中子模块交互方式的主要内容,如果未能解决你的问题,请参考以下文章

15 Vue中子组件样式的绑定和行内样式模版编写

Component 组件化框架

Android 开发:由模块化到组件化

Android四大组件之服务的两种启动方式详解

样式化组件中子组件输入焦点的样式父组件

vue中子组件传值给父组件