ViewRootImpl 在哪里拿到的 surface
时间: 2023-08-31 14:21:40 浏览: 41
### 回答1:
在Android系统中,ViewRootImpl类是Android View体系中的一个重要类,它负责将View树渲染到屏幕上。在ViewRootImpl类中,它通过WindowManagerService来创建和管理窗口,而每个窗口都对应着一个Surface对象。
具体来说,当一个窗口被添加到窗口管理器中时,WindowManagerService会在底层创建一个Surface对象,并将该Surface对象与该窗口相关联。而ViewRootImpl类在初始化时,会通过WindowManagerService获取和管理该窗口的Surface对象。在View树渲染时,ViewRootImpl会将渲染结果绘制到该Surface对象上,从而实现将View树显示到屏幕上的功能。
因此,可以说ViewRootImpl在初始化时通过WindowManagerService获取到了该窗口的Surface对象,并且在渲染View树时将渲染结果绘制到该Surface对象上。
### 回答2:
ViewRootImpl 是 Android 系统的一个重要组件,用于管理 View 层级的绘制和事件分发。它在初始化过程中会通过 Surface 类的对象来与底层的显示系统进行交互,实现 View 的绘制和更新。
ViewRootImpl 在哪里拿到的 Surface,实际上是通过 WindowManagerImpl 类来获取的。WindowManagerImpl 是 WindowManager 接口的实现类,负责管理窗口的显示和管理,它与底层系统进行交互,将视图渲染到 Surface 上。
当调用 WindowManager 的 addView() 方法向窗口管理器添加一个新的 View 时,WindowManagerImpl 就会创建一个 ViewRootImpl 对象作为该 View 的根节点,并将该 View 添加到视图树中。在创建 ViewRootImpl 的过程中,它会调用 Surface 的构造方法创建一个 Surface 对象,并将其与 ViewRootImpl 关联起来。
通过关联的 Surface 对象,ViewRootImpl 就可以通过 Surface 提供的接口来进行绘制和更新视图的操作。例如,在 View 层级发生变化时,ViewRootImpl 会通过 Surface 提供的函数将绘制指令发送给底层的图形子系统,然后由图形子系统来将 View 绘制到屏幕上。
因此,可以说 ViewRootImpl 是通过 WindowManagerImpl 在添加 View 的过程中拿到 Surface 的,这样它就可以使用 Surface 进行视图的渲染和更新。
### 回答3:
ViewRootImpl 在获取 surface 的过程中涉及到了以下几个步骤:
首先,在 ViewRootImpl 的构造方法中,会创建一个 WindowManagerImpl 的实例,用于与系统级别的窗口管理器进行通信。
接着,在 ViewRootImpl 的 performTraversals 方法中,会调用 WindowManagerImpl 的方法,通过调用 createSession 方法来创建一个新的 Session 实例。
然后,在 Session 的构造方法中,会获取到一个 SurfaceControl 的实例,该实例对应着一个用于绘制的表面(surface)。
最后,通过 SurfaceControl 的 getSurface 方法,就可以获取到实际的 surface 对象了。
总结起来,ViewRootImpl 在获取 surface 的过程中,是通过与 WindowManagerImpl 以及 SurfaceControl 进行交互,最终获取到实际的 surface 对象的。通过 surface 对象,ViewRootImpl 可以将 View 的绘制内容渲染到屏幕上。