什么是Android窗口?

Android中的Window是什么?

我认为Android中最顶层的级别叫Activity ,就是你看到的屏幕。

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

活动就是你所说的一个窗口。

从技术上讲,活动为你创造了窗户。

你可以有很多,但通常不是同步的。 要询问更多信息,您可以调用一个对话框,或将一个意图发送到另一个活动。

有关更多信息, 请访问此链接 。

[更新] (让我分享我原来的答案后,我已经了解了有关Window

在一个句子中, 一个 Window 是一个具有一个视图层次的矩形区域 。 下图中的彩色矩形是窗口。

在这里输入图像说明

正如你所看到的,在一个屏幕上可以有多个窗口, WindowManagerpipe理它们。 当前屏幕中的窗口列表可以通过Hierarchy Viewer或者adb shell dumpsys window

层次结构查看器中的窗口列表示例: 在这里输入图像说明

(以下是原文答案)


我有同样的问题,我希望这可以帮助你们。

根据Android开发者文档 ,

“每个活动都有一个窗口来绘制其用户界面”。

而Android框架工程师Dianne Hackborn 在这里给出了一些定义。 她说,

一个窗口基本上就像你想到桌面上的一个窗口。 它有一个单独的Surface ,其中窗口的内容被渲染。 应用程序与窗口pipe理器交互以创build窗口; 窗口pipe理器为每个窗口创build一个曲面并将其提供给应用程序进行绘制。 应用程序可以在Surface中绘制任何想要的东西; 到窗口pipe理器,它只是一个不透明的矩形。

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

视图是一个窗口内的交互式UI元素。 一个窗口有一个单独的视图层次结构,它提供了窗口的所有行为。 无论何时需要重绘窗口 (例如因为视图本身已经失效), 这将在窗口的Surface中完成 。 表面被locking,返回一个可用于绘制的canvas。 绘制遍历在层次结构中完成,为每个视图递减canvas以绘制其部分UI。 一旦完成,Surface将被解锁并发布,以便将刚绘制的缓冲区交换到前景,然后由Surface Flinger将其合成到屏幕上。

另外,我还发现了一些Romain Guy演讲的其他信息(您可以从这里观看旧金山Android用户组的演讲,并从这里下载完整的幻灯片)

在这里输入图像说明

所以,简而言之:

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

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

我想简单地说一下:

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