美文网首页Android
Android组件化创建独立的Application,Appli

Android组件化创建独立的Application,Appli

作者: 风起于山巅 | 来源:发表于2021-08-23 10:37 被阅读0次

    1.前言

    网上的博文其他方面都讲解的很详细,唯独这一块说的不是很理想,所以笔者自己整理了一篇文章,提供参考。项目地址:https://gitee.com/hepta/AndroidModular
    相关参考博文在主工程的App类中。

    2.common库

    在common库创建管理module初始化的工具类ModuleManager,通过反射获取对象,如果项目有混淆需要注意。

    class ModuleManager private constructor() {
    
        private var moduleNames = arrayOf(SOUTH_APP, NORTH_APP)
        private var modules = mutableListOf<ModuleSource>()
    
        init {
            // 初始化app
            for (name in moduleNames) {
                try {
                    val clazz = Class.forName(name)
                    modules.add(clazz.newInstance() as ModuleSource)
                } catch (e: ClassNotFoundException) {
                    e.printStackTrace()
                } catch (e: InstantiationException) {
                    e.printStackTrace()
                } catch (e: IllegalAccessException) {
                    e.printStackTrace()
                }
            }
        }
    
        private object SingleHolder {
            val instance = ModuleManager()
        }
    
        fun onCreate() {
            for (module in modules) {
                module.onCreate()
            }
        }
    
        fun onLowMemory() {
            for (module in modules) {
                module.onLowMemory()
            }
        }
    
        fun onConfigurationChanged(newConfig: Configuration) {
            for (module in modules) {
                module.onConfigurationChanged(newConfig)
            }
        }
    
        companion object {
            val instance: ModuleManager
                get() = SingleHolder.instance
    
            // 类描述: 组件生命周期初始化类的类目管理者,在这里注册需要初始化的组件,通过反射动态调用各个组件的初始化方法
            private const val SOUTH_APP = "com.tao.south.SouthModule"
            private const val NORTH_APP = "com.tao.north.NorthModule"
        }
    }
    

    3.主工程的application

    在主工程的application中通过ModuleManager初始化module

    class App : BaseApp() {
        override fun onCreate() {
            super.onCreate()
            XLog.e("App Init")
            ModuleManager.instance.onCreate()
        }
    
        override fun onLowMemory() {
            super.onLowMemory()
            ModuleManager.instance.onLowMemory()
        }
    
        override fun onConfigurationChanged(newConfig: Configuration) {
            super.onConfigurationChanged(newConfig)
            ModuleManager.instance.onConfigurationChanged(newConfig)
        }
    }
    

    4.model的application

    需要创建两个类做初始化用,NorthApp以及NorthModule,NorthApp提供module独立运行时AndroidManifest.xml使用,NorthModule作为module模块时使用。

    /**
     * 作为独立运行的Application
     */
    class NorthApp : BaseApp() {
    
        private val module = NorthModule()
    
        override fun onCreate() {
            super.onCreate()
            XLog.e("NorthApp Init")
            module.onCreate()
        }
    }
    
    class NorthModule : ModuleSource {
        override fun onCreate() {
            super.onCreate()
            XLog.e("NorthModule Init")
        }
    }
    

    5.项目地址

    https://gitee.com/hepta/AndroidModular

    相关文章

      网友评论

        本文标题:Android组件化创建独立的Application,Appli

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