我们做安卓开发,时时都在和Context打交道,那么Context到底是什么?有什么作用?如何与Application,Activity,Service等实例发生联系的?等等

Context是什么?

Context的字面意思是“上下文”,那么这个“上下文”到底指的是什么?“上”指的是什么?“下”指定的是什么?
个人的理解,有助于自己的理解的方式,不一定对,如果有更好的看法可以一块交流学习。个人的理解,“上”指的是在APP启动的时候,就与Context有关了,这个时候还是系统启动阶段,就与Context发生了联系。
“下”指定的是在APP界面正常显示出来以后,正常与用户交互的过程中,可以用Context获取资源,系统服务等。所以Context所谓的上下文就是承上启下的作用。

  1. Context的类的继承关系
    从上图可以看到,Context只有一个实现类ContextImpl,Application,Service,Activity都是直接或者间接继承了ContextWrapper,ContextWrapper中有一个变量mBase,也是个Context类型,实际是ContextImpl的对象,Application,Service,Activity所有的操作都是委托给了mBase实现。

  2. Context既然是承上启下,是个上下文,和APP启动流程有关,先来看看系统的启动流程和APP的启动流程,都在一张图里,如下:

从上图可以看到:

  • 首先系统的第一个进程 init跑起来,作一些初始化相关的工作,然后通过系统调用fork出了一个zygote进程,init进程通过poll阻塞在那了。

  • zygote进程被init进程fork出来以后,做一些jni初始化等,通过调用fork出了一个SystemServer进程,SystemServer进程里面跑的都是安卓的系统服务,zygote通过jni调用java的代码,fork出了SystemServer进程,打开了java世界

    网友评论