Window
Android中的什么是?
我认为Android的最高层称为Activity
,即您所看到的屏幕。
有人可以告诉我Android中的Window是什么吗?我们只有一个或多个吗?
Answers:
[更新](让我分享Window
原始答案后所学到的知识)
一句话,A 是一个具有一个视图层次结构的矩形区域。下图中的彩色矩形是窗口。Window
如您所见,一个屏幕中可以有多个窗口,并且由WindowManager管理它们。可以通过Hierarchy Viewer或来获得当前屏幕中的窗口列表adb shell dumpsys window
。
层次结构查看器示例中的窗口列表:
(下面是原始答案)
我有同样的问题,希望对您有所帮助。
根据Android开发者文档,
“每个活动都有一个在其中绘制其用户界面的窗口。”
并且,戴安娜Hackborn,谁是Android框架工程师,给了一些定义在这里。她说,
窗口基本上就像您在桌面上想到的窗口一样。它具有单个Surface,其中呈现了窗口的内容。应用程序与“窗口管理器”交互以创建窗口。窗口管理器为每个窗口创建一个Surface并将其提供给应用程序进行绘制。应用程序可以在Surface中绘制任何内容。窗口管理器只是一个不透明的矩形。
Surface是一个对象,其中包含要合成到屏幕的像素。您在屏幕上看到的每个窗口(对话框,全屏活动,状态栏)都有其自己的曲面,Surface Flinger会以其正确的Z顺序将其渲染到最终显示中。一个表面通常具有一个以上的缓冲区(通常是两个)来进行双缓冲渲染:当表面镶边器使用最后一个缓冲区合成屏幕时,应用程序可以绘制其下一个UI状态,而无需等待应用程序完成画画。
视图是窗口内部的交互式UI元素。窗口具有附加的单个视图层次结构,该视图层次结构提供了窗口的所有行为。每当需要重绘窗口时(例如,由于视图自身无效),都会在窗口的Surface中完成此操作。曲面被锁定,这将返回可用于绘制到其中的Canvas。绘制遍历是在层次结构中进行的,将Canvas传递给每个视图以绘制其UI部分。完成后,将对Surface进行解锁和发布,以便将刚绘制的缓冲区交换到前景,然后由Surface Flinger将其合成到屏幕。
另外,我发现一些其他信息罗曼盖伊的演示(你可以看他在旧金山的Android用户群的谈话在这里,并从下载完整的幻灯片在这里)
因此,简而言之:
Activity
具有窗口(其中它绘制它的用户界面),Window
具有单个Surface
和与它相连的单一视图的层次结构,Surface
包含ViewGroup
视图的include 。我想简单地说:
Application --->
Activity --->
Window Manager --->
Window --->
Surface --->
Canvas --->
View Root --->
View Group --->
View --->
Bitmap/Open GL panel --->
Current Surface Buffer --->
Surface Flinger --->
Screen