80

WindowAndroid中的 a 是什么?

我以为 Android 中的最顶层叫做Activity,也就是你看到的屏幕。

谁能告诉我 Android 中的 Window 是什么?我们只有一个还是多个。

4

4 回答 4

184

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

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

在此处输入图像描述

可以看到,一个屏幕可以有多个窗口,由WindowManager管理。当前屏幕的窗口列表可以通过Hierarchy Vieweradb shell dumpsys window.

Hierarchy Viewer 示例中的窗口列表: 在此处输入图像描述

(以下为原答案)


我也有同样的问题,希望对大家有帮助。

根据Android 开发者文档

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

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

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

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

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

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

在此处输入图像描述

所以,简而言之:

  • AnActivity有一个窗口(在其中绘制其用户界面),
  • a附加了一个单一的视图层次结构WindowSurface
  • Surface包含ViewGroup视图的包含。
于 2013-05-07T09:54:05.453 回答
26

我想简单地说:

Application --->
  Activity --->
    Window Manager --->
      Window --->
        Surface ---> 
          Canvas --->
            View Root ---> 
              View Group --->
                View ---> 
                  Bitmap/Open GL panel ---> 
                    Current Surface Buffer ---> 
                      Surface Flinger --->
                        Screen
于 2017-11-15T05:18:29.900 回答
16

Android:窗口、表面、画布和位图 这是一个非常基本且简单的概念概述,说明了 Window、Surface、Canvas 和 Bitmap 之间的交互是如何发生的。

于 2016-07-21T06:49:36.020 回答
10

Activity 就是您所说的窗口。

从技术上讲,Activity 为您创建了 Window。

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

欲了解更多信息,请访问此链接

于 2012-02-26T09:14:14.563 回答