3.2.3 界面组件的数据结构

了解界面组件android.app.Activity的继承结构(如图3-5所示),就可以从另一个角度来理解界面组件。Activity类派生自android.content.Context类,因此Context类在Android组件体系中扮演着极其重要的角色。它提供了应用运行的基本环境,是各组件和系统服务通信的桥梁。

Context类是个抽象类,android.app.ContextImpl派生实现了它的抽象接口。ContextImpl对象会与Android框架层的各个服务(包括组件管理服务、资源管理服务、安装包管理服务等)建立远程连接,通过Android进程间的通信机制(IPC)和这些服务进行通信。

3.2.3 界面组件的数据结构 - 图1

图 3-5 Activity的继承结构

通过Context的抽象和封装,隐藏了应用与系统服务通信的细节,简化了上层应用的开发。但对于开发者而言,需要理解这样的机制,慧眼识别隐藏在Context后的实现机理。

ContextImpl是在Android组件管理服务构造各组件对象时被实例化的。因此,如果上层应用期望改变Context接口的实现,就需要使用android.content.ContextWrapper类。ContextWrapper的设计应用了修饰模式,它派生自Context,其中的具体实现都是通过组合的方式调用ContextImpl的实例来完成的。这样的设计,使得ContextImpl与ContextWrapper子类的实现可以单独变化,彼此独立。Android的界面组件Activity、服务组件Service以及应用基类Application都派生于ContextWrapper,它们可以通过重载来修改Context接口的实现。

界面组件基类android.app.Activity添加了界面绘制相关的实现,增加了处理界面事件的相关接口。它存放界面中各控件的对象,并与窗口管理服务建立连接,传递界面相关的事件和操作。