Context简介
基于Android sdk 28 源码分析,Context是一个抽象类,其实现类是ContextWrapper它可以访问特定应用程序资源和类,例如启动活动,发起广播和接受意图。
从源码中得知ContextWrapper的方法实现都是由mBase实现,因为mBase的真正的实现是ContextImpl,所以Context真正的实现是ContextImpl。
应用中Context实例个数
Activity和Service方法中可以通过如下两个方法获取context,那么它们的区别是什么?
- getApplicationContext()
全局context - getBaseContext()
当前context对象,创建一个Acitivty或者Service都会重新创建Context
最终得出结论
context数量 = 全局context+Activity个数+Service个数
Context创建时机
从Activity开始分析,既然Activity中能够获取到context,那么Activity的创建过程中必定有Context的创建,从ActivityThread中找到创建ContextImpl过程。
找到如下三个函数中创建ContextImpl
- createBaseContextForActivity(…)
- handleBindApplication(…)
- performLaunchActivity(…)