什么是 Android 窗口?

在 Android 中什么是 Window

我认为安卓系统的最高级别叫做 Activity,也就是你看到的屏幕。

有人能告诉我什么是 Android 中的窗口吗? 我们只有一个还是多个窗口。

26867 次浏览

活动就是所谓的窗口。

从技术上讲,活动为您创建窗口。

您可以拥有许多这样的工具,但通常不是同步的。要询问更多信息,可以调用对话框,或者向另一个活动激发意图。

了解更多信息。

[更新] (在原答案之后,让我分享一下我对 Window的了解)

在一个句子中,< em > A Window 是一个具有一个视图层次结构的矩形区域。下面图像中的彩色矩形是窗口。

enter image description here

正如您所看到的,一个屏幕上可以有多个窗口,并且由 窗口管理器管理它们。当前屏幕的窗口列表可以通过 层次结构查看器adb shell dumpsys window获得。< br > < br >

“层次结构查看器”中的窗口列表示例: enter image description here

(以下为原答案)


我也有同样的问题,希望这个能帮到你们。

根据 Android 开发者文档,

“每个活动都有一个窗口,可以在其中绘制用户界面。”

而作为 Android 框架工程师的 Dianne Hackborn给出了 给你的一些定义,她说,

一个窗口 基本上就像你想象的桌面上的一个窗口。它是 有一个单独的 Surface,其中呈现窗口的内容。应用程序与窗口管理器交互以创建窗口; 窗口管理器为每个窗口创建一个 Surface,并将其提供给应用程序用于绘制。应用程序可以在 Surface 中绘制它想要的任何东西; 对于 Window Manager,它只是一个不透明的矩形。

Surface 是一个对象 保存要合成到屏幕上的像素。你在屏幕上看到的每个窗口(一个对话框,你的全屏活动,状态栏)都有它自己的表面,并且 Surface Flinger 以正确的 Z 顺序将它们呈现给最终的显示。一个表面通常有多个缓冲区(通常是两个)来进行双缓冲渲染: 应用程序可以绘制其下一个 UI 状态,而表面触发器使用最后一个缓冲区组合屏幕,而不需要等待应用程序完成绘制。

View 是窗口内部的交互式 UI 元素。一个窗口有一个单独的视图层次结构,它提供窗口的所有行为。当窗口需要重绘时(例如,因为一个视图已经使自己失效) ,这是做到窗户的表面。Surface 是锁定的,它返回一个画布,可以用来绘制到它。在层次结构中进行绘制遍历,将 Canvas 传递给每个视图以绘制其 UI 部分。一旦完成,表面是解锁和张贴,以便刚刚绘制的缓冲区交换到前景,然后合成到屏幕上的表面闪烁。

此外,我还从 罗马人的演讲中找到了一些其他的信息(你可以从 给你观看他在旧金山 Android 用户组的演讲,并从 给你下载完整的幻灯片)

enter image description here

所以,简而言之:

  • Activity有一个窗口(它在其中绘制其用户界面) ,
  • 一个 Window有一个单独的 Surface和一个单独的视图层次结构,
  • 一个 Surface包括拥有视图的 ViewGroup

Android: Window, Surface, Canvas, and Bitmap 这里是一个非常基本和简单的概念概述如何交互发生在窗口,表面,画布和位图。

我想简短地说:

Application --->
Activity --->
Window Manager --->
Window --->
Surface --->
Canvas --->
View Root --->
View Group --->
View --->
Bitmap/Open GL panel --->
Current Surface Buffer --->
Surface Flinger --->
Screen