Android 内核 - 02 Context

理解 Context


上下文,环境,场景,一个动态的过程,用户和Android系统交互的一次过程。Context贯穿整个App,理解它的源码,可以比较好的理解一个App的执行过程。

一个Activity或一个Service本质上就是一次与用户交互的,一个Activity或一Service就对应着一个Context。
Context 个数 = Service个数 + Activity 个数 + 1 (Application的Context)



Context 在 Android中的源码


Context.java  /frameworks/base/core/java/android/content/中,它本身的定义是一个抽象类
public abstract class Context {
......
}
其实现是在 ContextImpl.java 中   /frameworks/base/core/java/android/app/

源码中关于Context的类的关系

pic0
Application 和 Context

在Application中 Context(ContextImpl)的创建

相关文件
AccountManagerService.java (frameworks\base\services\java\com\android\server\accounts) 
ActivityThread.java (frameworks\base\core\java\android\app)

创建流程

p_01

Service 和 Context

在Service中 Context(ContextImpl)的创建

相关文件
ActiveServices.java (frameworks\base\services\java\com\android\server\am) 
ActivityThread.java (frameworks\base\core\java\android\app)

创建流程

p_02

Activity和 Context

在Activity中 Context(ContextImpl)的创建

相关文件
ActivityStackSupervisor.java (frameworks\base\services\java\com\android\server\am)
ActivityThread.java (frameworks\base\core\java\android\app)

创建流程
p_03


ContextImpl 的内容

从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;





发布了235 篇原创文章 · 获赞 31 · 访问量 59万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章