美文网首页
组件化的遇到的问题

组件化的遇到的问题

作者: maimingliang | 来源:发表于2017-05-20 23:31 被阅读128次

最近一直在忙着把项目进行模块化,组件化,记录一下在进行模块化过程中遇到的问题。

项目模块化,按什么来分module比较合理?

我的做法比较粗暴,直接按功能分。比如,几乎每个项目都有 设置功能,登陆功能等。
app SettingModule LoginModule

有一些可能使用领域模型来区分模块。很难定义出一个标准的区分模块,就好像项目分包一样,每一个都会有自己的一套。自己觉得方便就好。

Module 与 Module 之间的跳转了?

模块化之后 Ma 和 Mb 之间是不存在依赖关系的,就存在了但Ma 需要 跳转到Mb的某个Activity(或者Mb 跳转到Ma的某个Activity)问题?
使用Event Bus 通信?EventBus的单Module通信的
使用Boardcast?系统广播效率低,但前面的广播阻塞,下一个广播将无法接收
我的做法是
虽然Ma 和 Mb 自己不存在直接依赖的关系,但存在间接依赖,每个Module都依赖BaseModule

Github Module 间通信

后来发现阿里开源来一个ARouter框架,使用起来更方便。
详情看ARouter官网

Application合并

主工程有一个Application,当次级Module也有Application,运行程序会报错,一个工程只能有一个Application。然而当次级Module也需要加载时初始化一些数据怎么办?

可以使用接口抽象的思想。
每个module都会依赖于base module 。
在base module 创建接口 IModule
让需要初始化的Module实现该接口

然后在Application的oncreate方法通过反射统一加载

base Module

public interface IModule {
    void onLoad(Application app);
}

Ma


public class LoginModule implements IModule {
    @Override
    public void onLoad(Application app) {
        Timber.tag("LoginModule").d("-------> LoginModule ");
    }
}

MB


public class SettingModule implements IModule {
    @Override
    public void onLoad(Application app) {
        Timber.tag("SettingModule").d("-------> SettingModule ");
    }
}

主工程


        for(String name : ModuleConfig.moduleList){
            try {
                Class<?> clazz = Class.forName(name);
                Object instance = clazz.newInstance();

                if(clazz.newInstance() instanceof IModule){
                    Method method = clazz.getDeclaredMethod("onLoad", Application.class);
                    method.invoke(instance,this);
                }
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        }


        Timber.tag(TAG).d("----- time = " +(System.currentTimeMillis() - l));

反射会损耗性能,对比一下时间,其实没相差多少。

Menifest合并,资源合并

重复的权限,colors、drawable会合并

相关文章

  • 组件化遇到的问题

        来公司大半年时间了,一个人搞组件化不轻松,先来看看podfile,业务功能都已经拆分成了一个组件,现在主工...

  • 组件化遇到的问题

    1.如果组件化工程里依赖的framework,里面有了.a文件,pod install会报错 target has...

  • 组件化遇到的问题

    swift组件在项目内使用OC调用时,需要引入头文件 :#import "Swift组件名-Swift.h"组件由...

  • 组件化的遇到的问题

    最近一直在忙着把项目进行模块化,组件化,记录一下在进行模块化过程中遇到的问题。 项目模块化,按什么来分module...

  • Android 组件化遇到的问题

    最近在学习组件化相关内容,对遇到的一些问题进行记录 首先创建module 库后,需要对module中的build....

  • cocoapods组件化遇到的问题

    搞了cocoapods组件化好几天了,刚入门就遇到问题,搞了一周,今天终于静下心来仔细揣摩。终于搞定了。记录下路程...

  • ios组件化遇到的问题

    很全的podspec字段含义:https://www.jianshu.com/p/1692701d30ae 一、集...

  • Android组件化开发实践和案例分享【转】

    目录介绍 1.为什么要组件化 1.1 为什么要组件化1.2 现阶段遇到的问题 2.组件化的概念 2.1 什么是组件...

  • Android组件化开发实践和案例分享

    目录介绍 1.为什么要组件化1.1 为什么要组件化1.2 现阶段遇到的问题 2.组件化的概念2.1 什么是组件化2...

  • 06-组件化使用(加载xib、图片资源)

    1、组件化中含有xib文件 在组件化中已经把组件化的基本过程描述清楚了,下面来说说 组件化 使用过程中遇到的问题 ...

网友评论

      本文标题:组件化的遇到的问题

      本文链接:https://www.haomeiwen.com/subject/khujxxtx.html