### Android图形架构详解 #### 一、概览 在深入探讨Android图形架构之前,我们首先对这个主题有一个大致的理解。Android图形架构是Android系统中一个关键的组成部分,它负责处理与用户界面相关的所有图形渲染任务。该架构由多个组件组成,包括但不限于ActivityManager Service、WindowManager Service、SurfaceFlinger以及应用程序本身。 #### 二、关键概念解析 **1. Activity Manager Service (AMS)** - **功能**: 负责管理应用程序生命周期和活动之间的交互。 - **作用**: 在启动新Activity时,AMS会触发一系列操作来创建一个新的窗口并将其注册到WindowManager Service。 **2. WindowManager Service (WMS)** - **功能**: 控制屏幕上的窗口布局和显示。 - **作用**: 当创建新的Activity时,WMS会为新窗口分配一个Surface,并管理其在整个显示层次中的位置。 **3. SurfaceFlinger** - **功能**: SurfaceFlinger是负责合成和呈现不同应用程序窗口的组件。 - **作用**: 它接收来自各个应用程序的Surface数据,并将它们组合成最终的输出图像。 **4. App (Zygote Child Process B)** - **功能**: 每个运行的应用程序实例都作为一个独立的进程存在。 - **作用**: 应用程序负责构建视图层次结构并绘制到分配给它的Surface上。 **5. ViewRoot** - **功能**: ViewRoot是应用程序视图层次结构的根节点。 - **作用**: 它负责测量、布局和绘制视图层次结构,并与WindowManager Service通信以更新窗口状态。 **6. LayerStack** - **功能**: LayerStack用于组织和管理不同的Surface层。 - **作用**: SurfaceFlinger根据LayerStack中的顺序将各层合成在一起。 #### 三、启动Activity流程分析 启动新Activity涉及以下步骤: 1. **启动Activity**: 通过调用`ActivityManagerService.startActivity()`启动一个新的Activity。 2. **创建窗口**: 创建一个新的窗口并将其注册到WindowManager Service。这一步骤通过调用`Activity.attach()`并进一步调用`PolicyManager.makeNewWindow()`实现。 3. **创建Surface**: ViewRoot通过调用`WindowManagerService.addWindow()`来为新窗口创建一个Surface,并将Surface传递给Activity。 4. **绘制视图层次结构**: Activity通过`ViewRoot.setView()`方法设置其视图层次结构,并执行一系列的测量、布局和绘制操作。 5. **合成Surface**: SurfaceFlinger将所有可见的离屏Surface(layer)合成为最终的显示图像。 #### 四、关键操作解析 1. **Activity.attach**: 这个方法用于初始化Activity并与WindowManager Service建立联系。它会调用`PolicyManager.makeNewWindow()`来创建PhoneWindow实例,同时设置UI线程为主线程。 2. **ViewRoot.setView**: 此方法用于设置ViewRoot的视图层级,并最终通过`WindowManagerService.addWindow()`方法将新窗口添加到系统中。 3. **ViewRoot.performTraversals**: 该方法包含了视图层级结构的测量、布局和绘制过程。具体来说: - `PhoneWindow.DecorView.measure()`: 测量视图的尺寸。 - `ViewRoot.relayoutWindow()`: 通过调用`WindowManagerService.relayoutWindow()`重新布局窗口,并获取由WMS创建的Surface。 - `ViewRoot.draw()`: 绘制视图层级到Surface。 4. **SurfaceFlinger.threadLoop**: 这个方法是SurfaceFlinger的核心循环,负责周期性地合成所有Surface。 5. **WindowManagerService.finishDrawingWindow**: 在完成绘制后,ViewRoot会调用此方法通知WindowManager Service完成窗口的绘制。 #### 五、总结 Android图形架构的核心在于协调不同组件之间的交互,确保高效的图形渲染。通过理解AMS、WMS、SurfaceFlinger和应用程序之间的关系,我们可以更好地把握如何优化应用的性能和用户体验。此外,熟悉启动Activity的具体流程对于开发者来说也至关重要,因为它直接影响到应用程序的响应速度和流畅度。
剩余18页未读,继续阅读
- chinagreatman2014-10-13网上的资料,不值资源分
- 粉丝: 9
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助