标题中的舞蹈指挥是指 Choreographer。

Choreographer
英 [ˌkɒrɪ’ɒɡrəfə®] 美 [ˌkɒrɪ’ɒɡrəfə®]
n. 编舞者

舞蹈指挥是幕后英雄 本文从宏观层面讲述 Choreographer 这个类的作用。

Choreographer 是一座桥梁,连接着 SurfaceFlinger 和 ViewRootImpl。

SurfaceFlinger 的作用是组合多个 Surface。
完整的安卓手机窗口,由顶部状态栏、应用界面和底部导航栏共3个部分构成,每部分都是1个 Surface。
SurfaceFlinger 将这几个部分组合成一个 Surface,交由屏幕显示。

该图摘自[Android UI Internal : UI Composition with Hardware Composer (HWC)](http://pierrchen.blogspot.hk/2014/02/android-graphic-composition-hardware.html)

除此之外,SurfaceFlinger 还能发出 VSync 信号。

关于 SurfaceFlinger,暂时知道这么多就够用了。下面讲ViewRootImpl 。

一个应用 View 树的实际的根节点是 PhoneWindow$DecorView。而 DecorView 内的 invalidate() 或 requestLayout() 等操作是通过 ViewRootImpl 来开始的。

ViewRootImpl 内有一个叫 mView 的成员变量,这个变量就是 DecorView。

ViewRootImpl 中最重要的方法是 performTraversals(),在这个方法里面执行整个 View 树的 measure、layout 和 draw 操作。

好的,ViewRootImpl 就讲到这。

在实现上,ViewRootImpl 监听 Choreographer,Choreographer 监听 VSync。

当某个子 View 调用 invalidate() 或 requestLayout() 方法时,说明视图树需要更新,ViewRootImpl 会监听 Choreographer,而 Choreographer 则请求 VSync 信号。当 VSync 信号到来时,执行 Choreographer 的相关方法,处理 3 种事件:Input、Animation 和 Traversal。
其中,Traversal 也就是 ViewRootImpl#performTraversals(),然后 View 树就会被更新,进而显示在屏幕上。

下图摘自《Android Graphics Pipeline: From Button to Framebuffer (Part 1)》:

Choreographer——一个舞蹈指挥家的日常相关推荐

  1. 转:一个小公司老板的日常管理

    一个小公司老板的日常管理,希望能让创业的朋友学到东西 1. 小公司如何留住骨干: 2.关于授权 3.有的钱不能省 5.关于招聘 6.老板尽量唱红脸 7.公司里的亲戚 8.当老板和开车 9.按时发工资 ...

  2. 一个算法工程师的日常是怎样的?

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 来自 | 知乎 链接 | https://www.zhihu.com/question/2969281 ...

  3. 【转】一个小公司老板的日常管理,希望能让创业的朋友学到东西

    [转]一个小公司老板的日常管理,希望能让创业的朋友学到东西 1. 小公司如何留住骨干: 2.关于授权 3.有的钱不能省 5.关于招聘 6.老板尽量唱红脸 7.公司里的亲戚 8.当老板和开车 9.按时发 ...

  4. 一个程序员的日常软件清单

    一个程序员的日常软件清单 前言 年纪大了就容易忘东忘西.作为一个老程序员,我也来给大家带带货哈哈.国内搜索引擎做的实在是垃圾.如果你想通过搜索引擎搜索你想要下载的软件,你会很容易下载到一些附带流氓插件 ...

  5. 一个小公司老板的日常管理[朋友发来的,给大家分享一下]

    一个小公司老板的日常管理 这是一篇讨论现实商业经验的文章,一方面,可以给创业的朋友提供一些参考意见,另一方面,作者的经验中包含了许多经济学的道理.有兴趣的读者可以结合经济学知识和自己的感受做进一步的思 ...

  6. 【PC工具】建议收藏!一个有N多日常生活学习办公小工具的神奇网站,推荐在线工具网站...

    先发链接: http://www.gjw123.com/ 里边都是日常工作.生活.学习中可能会用到的,提高效率的小工具,很全面,比如:pdf格式转换.图片去水印.图片文字转换.logo制作等等.都是即 ...

  7. 一个小米SRE的日常问题排查记录

    日常巡检发现新扩容的一台web转发服务器负载异常.比原来的稍高仍然在正常范围内,but作为一个SRE是不能放过任何异常. 安排好其他日常工作开始排查. 新增服务器系统版本跟原来不一致.(原来为cent ...

  8. 一个程序员的日常书单(更新于2018/10/7)

    今日元宵节,祝各位节日快乐. 本想谈谈读书这个话题,想来想起觉得无从下手,就此作罢.毕业这几年,一直不敢放松,在现代这个互联网时代更加认同萧抡谓的"一日不读书,胸臆无佳想;一月不读书,耳目失 ...

  9. 一个小公司老板的日常管理

    看管理书籍管用吗?不管用!听讲座管用吗?不管用!IBM.HP的管理方法放之四海而皆准吗?不是!!!看看一个小老板发明的"草根"管理方法吧!挺实用的! 日常管理书看得不少,讲座也听了 ...

最新文章

  1. 在Java连接hbase时出现的问题
  2. 单链表排序----快排 归并排序
  3. CF293B Distinct Paths题解
  4. 超级直播sop直播源.zip_超级直播app壳 打造自己的直播app
  5. .gradle文件夹_Travis CI org.gradle.wrapper.GradleWrapperMain 错误
  6. syslog()的基本用法
  7. 一次前后端分离的实践
  8. CubeMx 生成的FreeRTOS 代码在ARM compiler6 编译__forceinline 报错的解决方法
  9. CSDN的一些年度大牛(2018)
  10. linux的wc命令源代码,linux下的wc命令的源代码
  11. php 定义一个json对象,PHP中使用json数据格式定义字面量对象的方法
  12. 数据结构c语言版第二版(严蔚敏)第一章笔记
  13. 同济大学 线性代数 第六版 pdf_线性代数同济第六版第六章课后习题答案!
  14. android 简书饿了么,对接饿了么平台总结
  15. Gradle的概念和理解.
  16. 高可用架构设计(3) -电商商品详情页缓存背景及框架说明
  17. VS code开发工具的使用教程
  18. 租赁行业如何将电子合同活用起来?
  19. 分享一个vue头像组件 vue-avatar
  20. C语言:字符串和字符串函数

热门文章

  1. 微信小程序第三方插件
  2. 利用EXCEL设计JJ斗地主的比赛模式
  3. Problem Q 蜜蜂找房子
  4. 7、【MySQL】数据的完整性
  5. 996加班累到肺部切除,维权之路
  6. gstreamer使用总结
  7. 西门子smart200与台达MS300变频器通讯程序
  8. GameFramework框架详解之 资源打包和加密
  9. Imx8串口故障案例分析
  10. final 的基本用法