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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.