一、一个应用程序包含多少个Context

应用程序有多少个Activity或者Service,就有多少个Context
二、Context相关类的继承关系

a.Context:
代表场景的一个抽象类
b.ContextWrapper:
Context的一个包装,构造函数中包含一个真正的Context引用,同时提attachBaseActivity函数为其指定一个真正的Context对象
c.ContextThemeWrapper:
内部包含主题相关的接口,即在AndroidManifest.xml中指定的android:theme
d.ContextImpl:
真正实现了Context中的所有函数,应用中调用的所以context方法均来自于此类
三、创建Context对象
i.Application对应的Context
a.程序启动时,Ams远程调用ActivityThread的bindApplication方法

b.然后调用handleBindApplication()

c.在handleBindApplication中为AppBindData对象中的info域赋值,该info域的类型为LoadedApk,为ActivityThread类的全局对象,然后调用makeApplication方法获得ContextImpl

d.然后在makeApplication方法中通过init将该ContextImpl赋给data.info,进而使Application获得ContextImpl
ii.Activity对应的Context
a.启动Activity时,Ams通过IPC调用ActivityThread的scheduleLaunchActivity方法,该方法会创建ActivityRecord,ActivityThread使用其来管理Activity

b.接着调用handleLaunchActivity

C.接着调用performLaunchActivity

d.接着将contextImpl赋给packageinfo

iii.Service对应的Context
a.启动Service时,Ams首先通过IPC调用ActivityThread的scheduleCreateService方法

b.接着调用handleCreateService方法

c.在handleCreateService方法中同样将contextImpl赋给packageinfo

本文深入解析了Android中Context的工作机制,包括Context的创建过程、不同组件间的Context获取方式及其内部实现原理。此外还介绍了Context相关类之间的继承关系,帮助开发者更好地理解和使用这一核心组件。

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



