parent
63e4564b08
commit
95d2456cec
@ -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…
Reference in new issue