Create Context 的理解.md

master
Omooo 5 years ago
parent 63e4564b08
commit 95d2456cec
  1. 84
      blogs/Android/Framework/Interview/应用进程相关/Context 的理解.md

@ -0,0 +1,84 @@
---
谈谈你对 Context 的理解?
---
1. 了解 Context 的作用
2. 熟悉 Context 初始化流程
3. 深入理解不同应用组件之间 Context 的区别
#### 问题
1. 应用里面有多少个 Context?不同的 Context 之间有什么区别?
2. Activity 里的 this 和 getBaseContext 有什么区别?
3. getApplication 和 getApplicationContext 有什么区别?
4. 应用组件的构造,onCreate、attachBaseContext 调用顺序?
```java
class ContextImpl extends Context {
final ActivityThread mMainThread;
final LoadedApk mPackageInfo;
private final ResourcesManager mResourcesManager;
private final Resource mResources;
private Resources.Theme mTheme = null;
private PackageManager mPackageManager;
final Object[] mServiceCache = SystemServiceRegistry.createServiceCache();
}
```
#### Context 是在哪创建的?
Application :
1. 继承关系
Application <- ContextWrapper <- Context
2. 调用顺序
\<init> -> attachBaseContext -> onCreate
Activity:
```java
private Activity performLaunchActivity() {
Activity activity = null;
activity = mInstrumentation.newActivity();
Application app = r.packageInfo.makeApplication();
Context appContext = createBaseContextForActivity(r, activity);
activity.attach(appContext, app, ...);
activity.onCreate();
return activity;
}
```
1. 继承关系
Activity <- ContextThemeWrapper <- ContextWrapper
2. 调用顺序
\<init> -> attachBaseContext -> onCreate
Service:
```java
private void handleCreateService(CreateServiceData data) {
Service service = null;
service = (Service) cl.loadClass(data.info.name).newInstance();
ContextImpl context = ContextImpl.createAppContext(this, packageInfo);
context.setOuterContext(service);
Application app = packageInfo.makeApplication();
service.attach(context, app);
service.onCreate();
}
```
Loading…
Cancel
Save