什么是Android窗口?

时间:2012-02-26 08:52:36

标签: android android-activity android-window

什么是Android中的Window

我认为Android中的最高级别称为Activity,这是您看到的屏幕。

有人可以告诉我Android中的Window是什么吗?我们只有一个或多个。

4 个答案:

答案 0 :(得分:152)

[更新] (让我分享原帖答案后我对Window所学到的知识)

在一句话中, A Window 是一个矩形区域,其中包含一个视图层次结构< / EM> 即可。下图中的彩色矩形是窗口。

enter image description here

如您所见,一个屏幕中可以有多个窗口,WindowManager可以管理它们。可以通过Hierarchy Vieweradb shell dumpsys window获取当前屏幕中的窗口列表。

Hierarchy Viewer示例中的窗口列表: enter image description here

(以下是原始答案)


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

根据Android Developer Documentation

  

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

Dianne Hackborn,谁是Android框架工程师,给出了一些定义here。她说,

  

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

     

曲面 是一个 对象,其中包含正在合成屏幕的像素 。您在屏幕上看到的每个窗口(对话框,全屏活动,状态栏)都有自己的绘图表面,而Surface Flinger会以正确的Z顺序将这些窗口渲染到最终显示。表面通常具有多个缓冲区(通常为两个)以进行双缓冲渲染:应用程序可以绘制其下一个UI状态,而表面抛光器使用最后一个缓冲区合成屏幕,而无需等待应用程序完成图。

     

视图是窗口内的交互式UI元素。 一个窗口附加了一个视图层次结构 ,它提供了窗口的所有行为。 每当需要重新绘制窗口 时(例如因为视图已使自身无效),会在窗口的Surface 中完成。 Surface已锁定,返回可用于绘制到其中的Canvas。在层次结构中完成绘制遍历,为每个视图向下移动Canvas以绘制其UI部分。完成后,Surface将被解锁并发布,以便刚刚绘制的缓冲区交换到前景,然后由Surface Flinger合成到屏幕上。

另外,我在Romain Guy的演示文稿中找到了其他一些信息(您可以在here的旧金山Android用户组中观看他的演讲,并从here下载完整幻灯片)< / p>

enter image description here

简而言之:

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

答案 1 :(得分:12)

我想简单地说:

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

答案 2 :(得分:11)

Android: Window, Surface, Canvas, and Bitmap 以下是关于如何在Window,Surface,Canvas和Bitmap之间进行交互的非常基本和简单的概念性概述。

答案 3 :(得分:8)

活动就是你所谓的窗口。

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

你可以有很多,但通常不同步。要询问其他信息,您可以调用Dialog,或者将Intent激发到另一个Activity。

了解更多信息visit this link