Android组件化创建独立的Application,Application共存问题

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()

    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,Application共存问题)