SurfaceFlinger是如何工作的?

3
我正在用C++开发一个非常简单的跨平台窗口类,只是为了有一个渲染表面。目前我已经将其在Linux和Windows上工作。在我让它在OS-X上工作后,我希望尝试将其运行在我的android手机上。
然而,我需要知道是否所有使用SurfaceFlinger创建的“窗口”都是全屏的,或者它们可以像Linux或Windows上的窗口一样只占据桌面的一部分?我问这个问题是因为我知道我可以在我的手机桌面上放置小部件,但我从来没有见过应用程序做出弹出窗口或悬浮在桌面上的框架之类的事情。
如何创建一个比手机分辨率小的"窗口"?它会仅居中可绘制表面并留下黑色边框吗?此外,一个应用程序可以拥有多个"窗口"吗?

这并不是针对您问题的确切回答,但我认为另一个问题的以下回答可以帮助您理解:https://dev59.com/W2455IYBdhLWcg3wCPjh#4577249 - Darshan Rivka Whittle
2个回答

2
Surfaceflinger,顾名思义,处理的是表面而不是窗口。 实际上,每个窗口都有一个它可以绘制的表面,但这些是不同类型的类。 每当某个应用程序窗口的ViewRootImpl(顶层视图)被创建或以某种方式更改时,就会调用WindowManagerService的relayout函数。 现在,跳过一些无聊的细节,WindowManagerService创建了一个表面。 表面可以是任何大小,如果您使用多个显示器,则甚至可以将其附加到某个显示器上(尽管尚未实现)。 这把我们带回了你的问题: - 表面(如果您喜欢,可以是窗口)可以是任何大小。您提到的黑色边框实际上来自当前窗口下方的窗口(并且被涂成黑色)。 - 是的,一个应用程序可以有多个窗口(例如,一个窗口可以是对话框)。
至于小部件,我知道启动器(桌面应用程序)如何支持它们并支持它们的拖放行为,但我从未想过它们是否实际上是新的窗口 - 因此我无法真正回答那个问题。

0

一个应用程序可以有多个“窗口”吗? 是的,一个应用程序可以有多个窗口。 1. 状态栏窗口 2. 活动屏幕窗口 3. 导航窗口 4. 对话框等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接