美文网首页
这次我用自己的话,分析了context

这次我用自己的话,分析了context

作者: Fakecoder_Sunis | 来源:发表于2018-05-03 18:07 被阅读0次
android_logo.jpeg

先看Context的继承关系

Context的继承关系

ContextWrapper直接继承了Context,但是它只是一个包装类,ContextWrapper中必须包含一个Context引用,而ContextWrapper的attachBaseContext()方法正是用于指定这个真正的Context对象。
ContextThemeWrapper类包含了与theme相关的接口。
所以Activity需要继承ContextThemeWrapper,而Service直接继承ContextWrapper(因为其不需要界面)。
ContextImpl是真正实现了Context所有方法,应用中调用context的方法,实际上均调用的ContextImpl类的实现

Context的创建

前面说过,Activity实际就是一个context,而Activity又基于ContextWrapper,ContextWrapper必须制定一个真正的Context对象,而真正实现了Context的是ContextImpl。
下面来看ContextImpl怎么创建并调用attachBaseContext()方法的。
ActivityThread中有下面几处出具体创建了ContextImpl

PackInfo.makeApplication()
performLauchActivity()
handleCreateBackupAgent()
handleCreateService()
handleBindApplication()
attach()方法

Application的创建(PackInfo.makeApplication()):
ActivityThread中多出调用makeApplication方法,而该方法在LoadedApk.java中 image.png
Instrumentation中 image.png
image.png
而Application的attach方法 image.png
Activity的创建(performLauchActivity())
ActivityThread中performLaunchActivity方法中 image.png image.png
Activity的attach方法 image.png
handleCreateBackupAgent()
handleCreateBackupAgent()方法中
BackupAgent的attach方法
Service的创建(handleCreateService())
image.png

相关文章

网友评论

      本文标题:这次我用自己的话,分析了context

      本文链接:https://www.haomeiwen.com/subject/atjkrftx.html