- 优点
最常用的方式,实现简单,没有性能 / 稳定性风险;可以按需初始化第三方库 & 懒加载
- 缺点
需要获取ApplicationContext / Context(依赖方与库代码强耦合),不利于组件化
下面,我将介绍两种无侵入获取Context的方法,将涉及到Android进程的启动流程
,若还不了解,请务必阅读文章:《Android | 带你理解 Application 的创建过程》
2. 反射 ActivityThread 获得 ApplicationContext(不推荐)
这一节介绍一种通过ActivityThread.java获得Application的方法,具体如下:
2.1 源码分析
我们都知道,在启动四大组件(Activity、Service、ContentProvider, BroadcastReceiver)时,如果对应的进程未启动,就需要先创建进程,相应地也会创建一个Application对象,即:
- 在system_server进程,通过AMS#getProcessRecordLocked(…)获取进程信息(ProcessRecord);
- 若不存在,则调用AM