Android 12 Window ViewRootImpl Activity的关系

发布时间 2023-06-02 11:40:45作者: luke4212

1 Window和ViewRootImpl有什么关系?

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

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

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

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

2 ViewRootImpl做了什么

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

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

3 Activity是什么角色?

和本篇博客相关的:

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