Android 内核 - 02 Context
上下文,环境,场景,一个动态的过程,用户和Android系统交互的一次过程。Context贯穿整个App,理解它的源码,可以比较好的理解一个App的执行过程。
一个Activity或一个Service本质上就是一次与用户交互的,一个Activity或一Service就对应着一个Context。
Context 个数 = Service个数 + Activity 个数 + 1 (Application的Context)
Context.java /frameworks/base/core/java/android/content/中,它本身的定义是一个抽象类
public abstract class Context {
......
}
其实现是在 ContextImpl.java 中 /frameworks/base/core/java/android/app/
源码中关于Context的类的关系
Application 和 Context
在Application中 Context(ContextImpl)的创建
相关文件
AccountManagerService.java (frameworks\base\services\java\com\android\server\accounts)
ActivityThread.java (frameworks\base\core\java\android\app)
创建流程
Service 和 Context
在Service中 Context(ContextImpl)的创建
相关文件
ActiveServices.java (frameworks\base\services\java\com\android\server\am)
ActivityThread.java (frameworks\base\core\java\android\app)
创建流程
Activity和 Context
在Activity中 Context(ContextImpl)的创建
相关文件
ActivityStackSupervisor.java (frameworks\base\services\java\com\android\server\am)
ActivityThread.java (frameworks\base\core\java\android\app)
创建流程
从ContextImpl的成员变量来看,它更像是是一个容器,保存了与它相关的局部或全局的一些信息。这些信息可以全面描述用户正在操作的场景。
/*package*/ LoadedApk mPackageInfo;
private String mBasePackageName;
private String mOpPackageName;
private Resources mResources;
/*package*/ ActivityThread mMainThread;
private Context mOuterContext;
private IBinder mActivityToken = null;
private ApplicationContentResolver mContentResolver;
private int mThemeResource = 0;
private Resources.Theme mTheme = null;
private PackageManager mPackageManager;
private Display mDisplay; // may be null if default display
private Context mReceiverRestrictedContext = null;
private boolean mRestricted;
private UserHandle mUser;
private ResourcesManager mResourcesManager;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.