【发布时间】:2012-02-26 08:52:35
【问题描述】:
什么是 Android 中的Window?
我以为 Android 中最顶层的级别叫做Activity,也就是你看到的屏幕。
谁能告诉我 Android 中的 Window 是什么?我们只有一个还是多个。
【问题讨论】:
标签: android android-activity android-window
什么是 Android 中的Window?
我以为 Android 中最顶层的级别叫做Activity,也就是你看到的屏幕。
谁能告诉我 Android 中的 Window 是什么?我们只有一个还是多个。
【问题讨论】:
标签: android android-activity android-window
[更新](让我分享一下我在原始答案后对Window 的了解)
一句话,A Window 是一个矩形区域,只有一个视图层次。下图中的彩色矩形是窗口。
如您所见,一个屏幕中可以有多个窗口,由WindowManager 管理它们。当前画面的窗口列表可以通过Hierarchy Viewer或adb shell dumpsys window获取。
层次结构查看器示例中的窗口列表:
(以下为原答案)
我也有同样的问题,希望对大家有所帮助。
根据Android Developer Documentation,
“每个活动都有一个窗口,可以在其中绘制其用户界面。”
还有,Android 框架工程师Dianne Hackborn 给出了一些定义here。她说,
一个窗口基本上就像你想象的桌面上的一个窗口。它有一个Surface,在其中呈现窗口的内容。应用程序与窗口管理器交互以创建窗口; Window Manager 为每个窗口创建一个 Surface 并将其提供给应用程序进行绘图。应用程序可以在 Surface 中绘制它想要的任何东西;对于窗口管理器,它只是一个不透明的矩形。
Surface 是一个对象保存正在合成到屏幕上的像素。你在屏幕上看到的每个窗口(一个对话框、你的全屏活动、状态栏)都有它自己绘制的表面,Surface Flinger 以正确的 Z 顺序将它们渲染到最终显示。一个表面通常有多个缓冲区(通常是两个)来进行双缓冲渲染:应用程序可以绘制它的下一个 UI 状态,而表面抛掷器正在使用最后一个缓冲区合成屏幕,而无需等待应用程序完成绘图。
视图是窗口内的交互式 UI 元素。 一个窗口有一个附加的视图层次结构,它提供了窗口的所有行为。 每当需要重绘窗口时(例如因为视图本身已失效),这会在窗口的 Surface 中完成。 Surface 被锁定,它返回一个可用于在其中绘制的 Canvas。绘制遍历是在层次结构中完成的,将 Canvas 向下传递给每个视图以绘制其 UI 部分。完成后,Surface 被解锁并发布,以便将刚刚绘制的缓冲区交换到前景,然后由 Surface Flinger 合成到屏幕。
另外,我从Romain Guy的演讲中找到了一些其他信息(您可以在here观看他在旧金山Android用户组的演讲,并从here下载完整幻灯片)
所以,简而言之:
Activity 有一个窗口(在其中绘制其用户界面),Window 有一个 Surface 和一个附加的视图层次结构,Surface 包括 ViewGroup,它拥有视图。【讨论】:
我想简单说一下:
Application --->
Activity --->
Window Manager --->
Window --->
Surface --->
Canvas --->
View Root --->
View Group --->
View --->
Bitmap/Open GL panel --->
Current Surface Buffer --->
Surface Flinger --->
Screen
【讨论】:
Activity 就是你所说的窗口。
从技术上讲,Activity 会为您创建 Window。
你可以有很多,但通常不是同步的。要询问更多信息,您可以调用 Dialog,或向另一个 Activity 触发 Intent。
欲了解更多信息visit this link。
【讨论】: