组件化AndroidAndroid架构

Android Componentization (组件化架构)

2019-02-18  本文已影响288人  Linhaojian

1.前言


2.目录

目录.png

3.组件化发展史

3.1 传统化项目结构

传统化结构.png

3.2 模块化项目结构

模块化结构.png

3.3 组件化项目结构

组件化结构.png

4.定义


5.作用


6.特点


7.组件化架构


8.组件化实践

8.1 base公用

8.2 module独立与集成

8.3 多Application初始化

8.3.1 实现原理

8.3.2 实现过程

* 1.创建一个抽象BaseApplication,其他module都继承于它。
public abstract class BaseApplication extends Application{
    public abstract void init(Context context);// 1
    @Override
    public void onCreate() {
        super.onCreate();
        // 初始化所有module公用的类库
        initPublic();
        // 初始化不同module的Application
        init(getApplicationContext());// 2
    }
    /**
     * 初始化Module功能的类库
     */
    public void initPublic(){
        ARouter.init(this);
    }
}
public class LoginAppcation extends BaseApplication {
    @Override
    public void init(Context context) {
        //初始化 login组件 中使用的类库
        // dagger2 、rxjava ....
    }
}
* 3.在主项目或者main组件中,通过反射进行初始化
public class MainAppcation extends BaseApplication {
    //module中application类的路径
    private static final String[] MODULESLIST =
            {"com.lhj.component.login.LoginAppcation"};
    @Override
    public void init(Context context) {
        //初始化 main组件 中所需的类库
        // 初始化其他module的Application
        modulesApplicationInit(context);
    }
    /**
     * 通过反射的方式,获取指定Application类的实例,并调用init函数,解决组件化多appplication独立的问题
     */
    private void modulesApplicationInit(Context context){
        for (String moduleImpl : MODULESLIST){
            try {
                Class<?> clazz = Class.forName(moduleImpl);
                Object obj = clazz.newInstance();
                if (obj instanceof BaseApplication){
                    ((BaseApplication) obj).init(context);
                }
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            }
        }
    }
}

8.4 module间界面的跳转

8.5 代码隔离

8.6 资源隔离

android {
    //...
    // 实现资源隔离
    resourcePrefix "login_"
}
* 2. 对于控件名称与文件名称,可根据自己的喜欢区分;

8.7 数据复用

8.8 资源复用


9.总结

欢迎关注linhaojian_CSDN博客或者linhaojian_简书

不定期分享关于安卓开发的干货。


写技术文章初心

  • 技术知识积累
  • 技术知识巩固
  • 技术知识分享
  • 技术知识交流
上一篇 下一篇

猜你喜欢

热点阅读