前言
组件化开发过程中,各个模块内往往需要感知Application的生命周期,以获取context完成初始化工作等,业务上模块间或存在初始化顺序要求,比较常规的做法有:
有需要大厂面经和面试技巧思维导图的朋友可以点进去了解一下,点击——【传送门】——即可!

在common模块定义 AppLifecycleCallback
interface AppLifecycleCallback {
fun getPriority(): Int = 0
fun onCreate(context: Context)
}
复制代码
各个模块实现 AppLifecycleCallback ,如Home模块
class HomeAppLifecycle : AppLifecycleCallback {
override fun getPriority(): Int = 0
override fun onCreate(context: Context) {
//todo
}
}
复制代码
然后在 MainApplication 中实现生命周期分发
class MainApplication : Application() {
private val callbacks = mutableListOf<AppLifecycleCallback>()
override fun onCreate() {
super.onCreate()
callbacks.add(HomeAppLifecycle())
callbacks.add(UserAppLifecycle())
// add whatever you want
// 排序实现模块顺序分发
callbacks.sortBy { it.getPriority() }
callbacks.forEach { it.onCreate(this) }
}
}
复制代码
这样能实现需求,但每增加一个模块,就得回到MainApplication中添加一个,不够优雅不够装,这时候就可以用上 APT + Transform
实现原理
- 各模块创建AppLifecycleCallback实现类,添加注解,apt为其生成代理类,以"_Proxy"结尾
- 构造 AppLifecycleManager 对外API,统一管理Proxyc allbacks
- gradle transform遍历.class文件,找到"_Proxy"的所有类,保存类路径,使用 asm 将代理类“加入”到AppLifecycleManager中
此方案主要是为了解学习apt,gradle transform,实际上有更好的实现方案。各位大佬畅所欲言,提出此方案的短板
实现过程
一、 AppLifecycle API
创建android-library,定义 AppLifecycleCallback 、 AppLifecycleManager

本文介绍了如何结合APT和Transform技术,在Android项目中实现多模块Application生命周期的优雅分发。通过创建AppLifecycleCallback接口,利用APT生成代理类,并在Gradle Transform中动态修改字节码,使得在MainApplication中无需手动注册每个模块的生命周期回调,提高了代码的维护性和扩展性。
最低0.47元/天 解锁文章
6035

被折叠的 条评论
为什么被折叠?



