组件化的优势
加快编译速度:每个业务组件都可单独运行调试,速度提升很多。
提高协作效率:每个组件都有专人维护,不用关心其他组件如何实现,只需要暴露对方需要的数据,测试也就不需要整个回归。
功能重用:一次编码到处复用,再也不用拷贝代码。尤其是基础组件和业务组件,基本上调用者根据文档就可以一键集成和使用。
组件化需解决的问题
-
业务组件如何实现单独调试?
-
业务组件间没有依赖,如何实现页面跳转?
-
业务组件间没有依赖,如何实现数据通信?
-
壳工程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 生命周期的方法都可以通过这种方式传递。
网友评论