Android 12 ViewRootImpl以及图形绘制简介

1 Window ViewRootImpl Activity的关系

2 Window和ViewRootImpl有什么关系?

看右侧流程图,上层的UI大体分成两大类,一是Activity,另一类是Custom Window(如状态栏、toast等)。

但是他们都要经过WindowManager.addView这个接口添加到系统中。

经过WindowManagerGlobal,会new一个ViewRootImpl,ViewRootImpl会申请server端的Session执行addWindow。

ViewRootImpl可以理解成是对应这个Window的View的根。

3 ViewRootImpl做了什么

new ViewRootImpl后,随后就会调用setView()方法,我这里梳理了三个重要代码:

  • 保存view对象。它会作为很多操作的基础,比如随后的requestLayout方法,作为绘制的对象
  • 实际调用WindowSession,向系统请求将View/Window添加到系统中
  • 初始化Input通道,使InputFlinger的事件可以分发给View

4 Activity是什么角色?

和本篇博客相关的:

  • 从UI的角度,Activity中的Window和DecorView负责显示和交互。
  • 从事件传递角度,app端的Input事件的源头在ViewRootImpl,传递过程如图右下角。

5 Vsync信号的传递和绘制

  1. ViewRootImpl会向Choreographer注册回调,等待下一个绘制的时机

  2. Choreographer通过libgui的接口,最终会向SurfaceFlinger注册监听Vsync信号

  3. 接收到Vsync信号后,回调Choreographer的doFrame

  4. doFrame触发Input、动画、绘制等操作,ViewRootImpl负责处理绘制

  5. ViewRootImpl触发View树的measure layout draw等

  6. View的绘制操作都会交给Canvas对象,(2D情况)最终会交给skia的图形绘制引擎

posted on   luke4212  阅读(134)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示