1.前言
網(wǎng)上的博文其他方面都講解的很詳細(xì)唆垃,唯獨(dú)這一塊說(shuō)的不是很理想,所以筆者自己整理了一篇文章痘儡,提供參考辕万。項(xiàng)目地址:https://gitee.com/hepta/AndroidModular
相關(guān)參考博文在主工程的App類中。
2.common庫(kù)
在common庫(kù)創(chuàng)建管理module初始化的工具類ModuleManager沉删,通過(guò)反射獲取對(duì)象渐尿,如果項(xiàng)目有混淆需要注意。
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
// 類描述: 組件生命周期初始化類的類目管理者,在這里注冊(cè)需要初始化的組件,通過(guò)反射動(dòng)態(tài)調(diào)用各個(gè)組件的初始化方法
private const val SOUTH_APP = "com.tao.south.SouthModule"
private const val NORTH_APP = "com.tao.north.NorthModule"
}
}
3.主工程的application
在主工程的application中通過(guò)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
需要?jiǎng)?chuàng)建兩個(gè)類做初始化用矾瑰,NorthApp以及NorthModule砖茸,NorthApp提供module獨(dú)立運(yùn)行時(shí)AndroidManifest.xml使用,NorthModule作為module模塊時(shí)使用殴穴。
/**
* 作為獨(dú)立運(yùn)行的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")
}
}