前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android组件前奏---App+module的启动

Android组件前奏---App+module的启动

作者头像
大话swift
发布2020-03-12 18:25:22
7940
发布2020-03-12 18:25:22
举报
文章被收录于专栏:大话swift

一个App里面默认都有一个单例那就是Application,而组件化的过程中除了app这个壳工程的启动是我们时长需要设置一些默认的参数配置等操作,其实对于附加启动的module也是需要一些附加的启动或者对自身所在module做处理。那么我们怎么来实现module的Application随App一起启动做初始化操作呢?

我们分析一下通常会遇到的情况

我们组件化中会有多个独立Module,那么需要随App进行同时进行配置的可能会有多个,那么在我们是不需要一个统一的模版规范让读个module走循序呢?

根据上面我们可以做如下拆分 1 做一个抽象的基类继承于Application,内部做成模版流程,App以及Module的Application均继承于此

代码语言:javascript
复制
public abstract class BaseApp extends Application {    /**     * Application 初始化     */    public abstract void initModuleApp(Application application);
    /**     * 所有 Application 初始化后的自定义操作     */    public abstract void initModuleData(Application application);    public void afterModuleAndBeforeData(Application application) {
    }
    @Override    public void onCreate() {        super.onCreate();        this.initModuleApp(this);        this.afterModuleAndBeforeData(this);        this.initModuleData(this);    }}
代码语言:javascript
复制
//登陆modulepublic class LoginApp extends BaseApp {    @Override    public void initModuleApp(Application application) {
    }
    @Override    public void initModuleData(Application application) {
    }
    @Override    public void afterModuleAndBeforeData(Application application) {        super.afterModuleAndBeforeData(application);        ServiceFactory.getInstance().setAccountService(new AccountService());    }}

2 壳工程中的Application

对于壳工程此时需要的就是实现整个App启动前的初始化以及对应加载Module启动

2.1 自身配置的启动

代码语言:javascript
复制
public class MainApp extends BaseApp {    @Override    public void onCreate() {        // 初始化 ARouter        if (BuildConfig.DEBUG) {           // 这两行必须写在init之前,否则这些配置在init过程中将无效            ARouter.openLog();     // 打印日志            ARouter.openDebug();   // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)        }        ARouter.init(this);        super.onCreate();    }
    @Override    public void initModuleApp(Application application) {           }
    @Override    public void initModuleData(Application application) {
    }
    @Override    public void afterModuleAndBeforeData(Application application) {        super.afterModuleAndBeforeData(application);
    }}

2.2 需要初始化配置的Module动态加载

对于需要启动的module我们可以通过在壳工程中声明Module中Application的包名采用反射的方式来实现同时将壳工程的Application传递值Moudle

代码语言:javascript
复制
 // for (String moduleApp : Components.moduleApps) {            try {                Class clazz = Class.forName(moduleApp);                BaseApp baseApp = (BaseApp) clazz.newInstance();                baseApp.initModuleApp(this);            } catch (ClassNotFoundException e) {                e.printStackTrace();            } catch (IllegalAccessException e) {                e.printStackTrace();            } catch (InstantiationException e) {                e.printStackTrace();            }        }

至此我们完成了App的启动,一个按照模版的方式完成多个Module的动态初始化加载

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大话swift 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档