Android学习笔记之Context

Android Context 到底是什么?

什么是Android Context?

一个Context意味着一个场景,一个场景就是我们和软件进行交互的一个过程。

那么从安卓程序的角度来看,Context是什么?其实一个Activity就是一个Context,一个Service也是一个Context。

一个应用程序可以认为是一个约会环境,用户在这个环境中会切换到不同的场景,比如先去有情调的饭店吃饭,再去电影院看个电影,然后再去xxx(此处省略一万字...)。

Activity类的确是基于Context,而Service类也是基于Context。Activity除了基于Context类外,还实现了一些其他重要的接口,从架构设计的角度看,interface仅仅是某些功能,而extends才是类的本质,即Activity的本质是一个Context,其所实现的其他接口只是为了扩充Context的功能而已,扩充后的类称之为一个Activity或Service。

一个应用程序中应该有多少个Context对象

我们在应用程序开发中经常会调用Context的一些方法,这些方法看起来似乎会返回一些全局的对象,而不仅仅是某个Activity,可能会有点疑问,一个应用程序到底有多少个Context对象呢?比如,Context.getResources()返回该应用程序所对应的Resource类对象,无论从哪个Activity中调用,都会返回同一个Resource对象。

  • 一个Activity就是一个场景(Context),一个Service也是一个场景,所以,应用程序中有多少个Activity或者Service就会有多少个Context对象,也就是有多少个场景。
  • getResource()等方法返回的是同一个全局对象。

Context 继承关系是怎么样的呢?

 

Context类及其子类的继承关系

Context类及其子类的继承关系

 

Context类本身是一个纯abstract类。为了使用方便又定义了Context包装类-ContextWrapper,穿上了一身装备显得也比较强大,ContextWrapper构造函数中必须包含一个真正的Context引用,同时ContextWrapper中有attachBaseContext()用于给ContextWrapper对象中指定真正的Context对象。

ContextThemeWrapper内部包含了与主题相关的接口,这里的主题就是指在AndroidManifest.xml中通过android:theme为Application或者Activity指定的主题。

只有Activity才需要主题,Service默默的后台工作者不需要穿的那么鲜艳,所以Service直接继承于ContextWrapper。

ContextImpl类真正实现了Context中所有的函数,真正的八块腹肌,我们所调用的各种Context类的方法其实实现均来自于该类。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章