Android GUI架构-Surface/view/window/canvas之间的关系

2024-01-01

=========================

更新:经过几天的谷歌搜索和实验 https://github.com/pierrchen/understandAndroidUI,我已经找到了大部分愚蠢问题的答案。查看我提交的答案。

=========

Android Window 的职责是什么?

这里有一些问题:

  • 它负责收集和发送输入吗?
  • 视图和窗口之间有什么关系?和DFB中surface和window的关系一样吗?
  • Activity 和窗口之间有什么关系?每个Activity都会有一个窗口吗?
  • 是否可以从应用程序创建一个窗口?什么时候有必要?
  • 安卓支持多窗口吗?

编辑:添加更多问题:

  1. 各个类(例如 Window、View、Canvas、Surface)的职责是什么以及它们如何相互协作?

  2. 一个Activity通常有多少个窗口?

3.一个Activity中的所有视图都会附加到Window上吗? 附加是什么意思?

  1. 每个窗户都有表面吗?每个画布都有表面吗?

  2. View负责focus/keyEvent/manager,而Cavus只负责“绘图”操作。

  3. WindowManager负责Window的堆叠?这与 SurfaceFlinger 有什么关系?

  4. View 不拥有 Surface ,视图包含的 Window 拥有吗?

  5. View 使用通过调用 surface.lockCanvas() 获得的画布来绘制自身。

  6. onDraw(Canvas)什么时候会被调用?如何以及由谁传递画布参数?

  7. Canvas 有尺寸吗? Window 的表面会始终全屏吗?

再次编辑:

看完 Romain Guy 提供的精彩演示后,解决了几个问题并添加了更多:)

  1. 每个 Activity 都会有一个 ViewRoot 并因此有一个 Window 吗?
  2. 是否需要显式创建一个窗口?窗口表面是否始终全屏?
  3. 状态栏会在另一个窗口中吗?
  4. 表面的尺寸是多少?会一直全屏吗?

Window 负责收集和发送输入吗?

不。ViewRoot 对此负责。

视图和窗口之间有什么关系?与 DFB中曲面和窗口之间的关系?

?

Activity 和窗口之间有什么关系?每个活动都会有一个窗口吗?

是的,大多数时候。然而,SurfaceView 有自己的窗口。因此,如果一个 Activity 有一个 SurfaceView,那么它就会有多个 Window。

是否可以从应用程序创建窗口?什么时候有必要?

不必要。

安卓支持多窗口吗?

当然。使用HierachyView你可以清楚地看到系统中存在多个Window。

1.各个类的职责是什么,比如Window, View, Canvas, Surface,以及他们如何相互协作? 2.一个Activity通常有多少个窗口?

通常是一个。

3.一个Activity中的所有视图都会附加到一个窗口吗?附加是什么意思? 4.每个窗户都有表面吗?每块画布都有表面吗?

每个窗口都有一个表面和Surface uses Canvas在表面上绘制。

5.View负责管理焦点/按键事件,而Canvas只负责“绘图”操作?

YES.

6.WindowManager负责Window的堆叠?这与什么有关系SurfaceFlinger?

不确定窗口管理器的责任。 (去做)

SurfaceFlinger用于组合与不同Window/Activity关联的Surface。

7.View不拥有Surface,视图包含的Window拥有吗?

视图将使用 Canvas 在表面上绘制。视图所附加到的窗口拥有该表面。

这可以通过实现自定义视图来理解,当您应该覆盖onDraw(Canvas)派生类中的方法。

8.View使用调用surface.lockCanvas()获得的canvas来绘制自己?

YES.

9. 何时以及如何onDraw(Canvas)调用,谁传递画布参数?

onDraw()将被称为RootView以及当调用 invalidate 时。 canvas 参数是从 RootView 传递的。

10.Canvas有尺寸吗?窗口表面总是全屏吗?

我不能肯定地说。但是当我创建自定义视图时,从 onDraw(Canvas) 获取的画布大小是全屏的。

然而,根据我的理解,出于性能考虑,窗口的Surface不应该总是全屏。但这一假设尚未得到验证。例如,statusBar 窗口不应该是全屏的。

1.每Activity有一个ViewRoot因此一个Window?

YES.

2.是否需要显式创建一个窗口?窗口的表面会始终全屏吗?

本身不需要显式创建窗口。

3.状态栏会在另一个窗口吗?

YES.

4. 表面尺寸是多少?会一直全屏吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android GUI架构-Surface/view/window/canvas之间的关系 的相关文章

随机推荐

  • 将 python 列表转换为字典

    我正在尝试将我的列表转换为 python 中的字典 我有清单l l a b c d 我想将它转换为字典 d d a d b d c d d 我正在尝试 for i in range 0 len l d i 0 l i 但这行不通 谢谢 保持
  • 即使使用 -Ofast,Swift 的字典也很慢

    我正在使用本质上实现缓存Dictionary在斯威夫特 表现远远低于我的预期 我读过其他一些问题 例如这是关于数组排序的 https stackoverflow com questions 24101718 swift performanc
  • Backbonejs 与小胡子模板。

    我想使用带有小胡子模板的backbonejs 来做一个简单的应用程序 你能给我一个示例程序吗 新节点文件 var Person Backbone Model extend defaults name Guest Worker var Per
  • 为什么 Applicative 应该是 Monad 的超类?

    Given Applicative m Monad m gt mf m a gt b ma m a 这似乎被认为是一项法律 mf lt gt ma do f lt mf a lt ma return f a 或者更简洁地说 lt gt ap
  • 获取鼠标相对于饼图的位置(方程)

    我已经从一组数据创建了一个画布饼图 我现在尝试定位相对于饼图的鼠标位置 以检测正在悬停的数据部分 我快到了 但我被一个方程式困住了 我的逻辑运行良好 所以我认为这更像是一个数学问题 但会看看其他人对我的方法的看法 这是我的饼图和我正在使用的
  • Maven `pom.xml` 中 标签之间的区别[重复]

    这个问题在这里已经有答案了 配置我的时pom xml 我必须配置一个插件 我发现的是
  • 为什么这个特征中需要“Sized”界限?

    我有一个具有两个相关功能的特征 trait WithConstructor Sized fn new with param param usize gt Self fn new gt Self Self new with param 0 为
  • laravel重置密码不重置密码

    我正在使用 laravel 6 我第一次尝试为我的 laravel 项目实现忘记密码 我自定义了登录 忘记密码 重置密码页面的默认设计 我已经集成了mailtrap用于发送电子邮件 我已经成功地实现了这样的流程 单击忘记密码链接 获取用户输
  • 无论操作系统如何,在 Java 中执行计划任务的最佳解决方案是什么?

    我想在我的 Java 桌面应用程序上生成警报 设置特定日期 时间的警报 可以是 5 分钟或 5 个月内 我需要能够在触发警报时创建 SWT 应用程序 我需要它能够在任何操作系统上工作 软件用户可能使用 Windows 其中 90 其余使用
  • CVXPY 在二次规划优化问题上返回不可行/不准确

    我正在尝试使用 CVXPY 来解决非负最小二乘问题 附加约束是解向量中的条目之和必须等于 1 然而 当我使用 SCS 求解器在这个简单的二次程序上运行 CVXPY 时 我让求解器运行最多 100000 次迭代 最后遇到错误 指出二次程序不可
  • 为什么运行 Rspec 时会出现未定义方法“有”错误?

    我最近升级到 Rails 4 除了 Rspec 测试之外 一切正常 require spec helper describe Invoice do before each do user FactoryGirl create activat
  • Laravel 查询生成器 - sum() 方法问题

    我是 Laravel 的新手 查询生成器有一些问题 我想构建的查询是这样的 SELECT SUM transactions amount FROM transactions JOIN categories ON transactions c
  • 如何在 remix run 中从实用程序函数重定向

    我正在使用 Remix run 我想从 auth 实用程序函数重定向到我的登录页面 但它不起作用 这是与我的身份验证实用程序方法类似的功能 import redirect from remix async function authenti
  • 在 for 循环中使用“else”的 Pythonic 方法[重复]

    这个问题在这里已经有答案了 我几乎没有注意到Python程序在for循环中使用了else 我最近使用它在退出时根据循环变量条件执行操作 因为它在范围内 在 for 循环中使用 else 的 Python 方式是什么 有什么值得注意的用例吗
  • Jquery找到所有以字符串开头的id?

    只是想知道如何在整个页面中搜索以 content 开头的所有 id 以及如何仅在名为 extra content 的命名 div 中找到它们 一旦我有了所有的ID 我想隐藏它们 下面是我想找到的示例 div div lt Find div
  • 使用 Maven 的 JavaScript 缩小工作流程

    我想知道是否有任何 最佳实践 可以将 现代 JavaScript 构建工作流程 集成到生成 WAR 工件的 Maven 构建中 我发现了几个处理串联和缩小的 Maven 插件 WRO4J https code google com p wr
  • 如何开始 VOIP 编程? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如何开始开发 VoIP 产品 想听听
  • 抛出异常时不调用析构函数

    考虑以下代码 include
  • MongoDB 和 C#:不区分大小写的搜索

    我在用MongoDB http www mongodb org 和MongoDB 的 C 驱动程序 http www mongodb org display DOCS CSharp Language Center CSharpLanguag
  • Android GUI架构-Surface/view/window/canvas之间的关系

    更新 经过几天的谷歌搜索和实验 https github com pierrchen understandAndroidUI 我已经找到了大部分愚蠢问题的答案 查看我提交的答案 Android Window 的职责是什么 这里有一些问题 它