美文网首页
Android(49)组件化开发

Android(49)组件化开发

作者: perry_Fan | 来源:发表于2022-08-10 22:38 被阅读0次

    组件化的优势

    加快编译速度:每个业务组件都可单独运行调试,速度提升很多。
    提高协作效率:每个组件都有专人维护,不用关心其他组件如何实现,只需要暴露对方需要的数据,测试也就不需要整个回归。
    功能重用:一次编码到处复用,再也不用拷贝代码。尤其是基础组件和业务组件,基本上调用者根据文档就可以一键集成和使用。

    组件化需解决的问题

    • 业务组件如何实现单独调试?

    • 业务组件间没有依赖,如何实现页面跳转?

    • 业务组件间没有依赖,如何实现数据通信?

    • 壳工程Application 生命周期如何下发?

    1. 单独调试

    单工程library 引入,最后上传 阿里maven仓库方式来依赖。合理拆分业务层级。

    2. 页面跳转

    采用阿里 ARouter 方案。在common模块内声明路由表,统一管理。

    3. Application 生命周期分发

    当 app 壳工程启动 Application 初始化时要通知到其他组件初始化一些功能。
    在common 公共库内声明接口 BaseApp

    interface BaseApp{
      fun onCreate(application: Application)
    }
    

    然后每个组件都要创建一个 App类实现此接口。

    class HomeApp:BaseApp{
      override fun onCreate(application: Application){
          // 初始化操作
      }
    }
    

    app壳工程分发 application的生命周期

    val moduleInitArr = arrayOf(
        "com.yh.module_common.AppCommon",
        "com.yh.gl_home.HomeApp",
        "com.yh.gl_msg.MsgApp",
        "com.yh.gl_me.MeApp"
    )
    class App: Application() {
        override fun onCreate() {
            super.onCreate()
            initModuleApp(this)
        }
        private fun initModuleApp(application: Application) {
            try {
                for(appName in moduleInitArr) {
                    val clazz = Class.forName(appName)
                    val module = clazz.getConstructor().newInstance() as BaseApp
                    module.onCreate(application)
                }
            } catch (e: Exception) {
                e.printStackTrace()
            }
        }
    }
    

    我们只需要知道的每个实现 BaseApp 接口的类的全限定名 并写到 moduleInitArr 数组里,然后通过反射获取 Class 对象从而获取构造函数创建实体对象,最后调用 BaseApp 的 onCreate 方法将 application 传入,每个 Application 生命周期的方法都可以通过这种方式传递。

    相关文章

      网友评论

          本文标题:Android(49)组件化开发

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