Android笔记(八)Context

来源:互联网 发布:python上传图片的步骤 编辑:程序博客网 时间:2024/06/05 19:09

本篇文章是看gitYuan博客Context理解一文作出的笔记

先来张类图,有个大概的框架概念
这里写图片描述
我们常用的Application、Activity、Service都间接继承自ContextWrapper类,该类继承自Context抽象类,ContextImpl也继承自Context抽象类。ContextWrapper类对Context进行了包装,包装的方式为:将Context作为自己的一个属性。而该属性的赋值(实例化)是通过ContextImpl来完成的。所以一定程度上,ContextWrapper也是对ContextImpld的封装。此外,可以说ContextImpl是Context的唯一实现类(ContextImpl实现了其中的方法,虽然说ContextWrapper也实现了这些方法,但它是通过实调用mBase.XXX()来实现的),例如
在Context.java中

public abstract AssetManager getAssets();

在ContextImpl.java中

public AssetManager getAssets(){    return getResources().getAssets();}

在ContextWrapper.java中

public AssetManager getAssets(){    return mBase.getAssets();//mBase为Context属性}

四大组件初始化流程

组件的初始化过程都是在ActivityThread类中完成的。

Activity组件

performLaunchActivity()
这里写图片描述

Service组件

handleCreateService()
这里写图片描述

BroadCast Receiver组件

handleCreateReceiver()
这里写图片描述
以上过程是静态广播接收者, 即通过AndroidManifest.xml的标签来申明的BroadcastReceiver;如果是动态广播接收者,则不需要再创建那么多对象, 因为动态广播的注册时进程已创建, 基本对象已创建完成. 那么只需要回调BroadcastReceiver的onReceive()方法即可.

installProvider

installProvider()

这里写图片描述

Application

createBinderApplication()
这里写图片描述

原创粉丝点击