当前位置: 首页 > news >正文

Android中Activity,Window,Application,WindowToken,View,Display之间关系用通俗形象的方式介绍下

Android中Activity,Window,Application,WindowToken,View,Display之间关系用通俗形象的方式介绍下

这六个概念确实容易让人混淆,但它们之间的关系其实非常清晰。我们可以用一个**"开电影院"**的比喻,把它们全部串联起来:


🎬 用"开电影院"来理解

Application = 电影公司

它是整个 App 的大管家,一个 App 启动时只创建一个 Application 实例。它不管具体放哪部电影,只负责全局资源的初始化(比如数据库、网络配置),以及在整个 App 生命周期内共享数据。

Activity = 一个放映厅

每个 Activity 就是一个独立的放映厅。一个电影公司(Application)可以开多个放映厅(Activity),每个厅放不同的电影(不同的界面)。放映厅有自己的生命周期——开门迎客(onResume)、中场休息(onPause)、关门清场(onDestroy)。

Window = 放映厅里的"银幕"

每个放映厅(Activity)里都有一块银幕(Window),具体实现叫PhoneWindow银幕才是真正负责"显示画面"的东西,Activity 本身不画任何东西,它只是通过setContentView()告诉银幕:"把这部电影(布局)放上去"。

View = 银幕上的"画面内容"

View 就是银幕上显示的具体内容——演员、字幕、特效。所有的按钮、文本、图片都是 View。它们被组织成一棵树(View Tree),挂在银幕(Window)上。最顶层的那个 View 叫DecorView,它相当于银幕的边框+内容区的总和。

Display = 物理屏幕/投影仪

Display 代表真实的物理显示设备。大多数手机只有一个 Display(内置屏幕),但如果连接了副屏或投屏,就会有多个 Display。你可以把同一个放映厅(Activity)的画面投到不同的投影仪(Display)上——这就是前面说的"多屏异显"。

WindowToken = 银幕的"放映许可证"

这是最抽象的一个概念。WindowToken 是 WindowManager 颁发给 Window 的一张**"身份证"或"许可证"**。它的作用是:

  • 证明身份:告诉系统"这个 Window 是合法的,属于某个 Activity"。
  • 分组管理:系统通过 WindowToken 把属于同一个 Activity 的所有 Window(比如 Activity 主窗口 + 它弹出的 Dialog)归为一组,统一管理它们的层级和显示顺序。
  • 安全控制:没有合法的 WindowToken,你就不能随便在别的 App 上面画东西(防止恶意悬浮窗)。

📌 一句话总结它们的关系

Application(电影公司)开了一个Activity(放映厅),放映厅里挂了一块Window(银幕),银幕上播放着View(画面内容),画面最终通过Display(投影仪)投射出来,而WindowToken(放映许可证)确保这块银幕是合法挂载的。


🔗 层级关系图

Application (全局大管家) └── Activity (一个页面/放映厅) └── Window (银幕,PhoneWindow) └── DecorView (银幕边框+内容区) └── View Tree (具体画面:按钮、文本、图片...) WindowToken ←── 绑定 ──→ Window (身份证明) Display (物理屏幕,Window 最终画到这里)

💡 一个实际场景帮你加深理解

当你点击 App 图标启动时,系统做了这些事:

  1. 创建Application(如果还没创建的话)
  2. 创建Activity,并自动为它创建一个Window(PhoneWindow)
  3. 给这个 Window 分配一个WindowToken,注册到 WindowManager
  4. 你调用setContentView(R.layout.main),系统把你的布局解析成一棵View树,挂到 Window 上
  5. Window 通过Display把最终画面渲染到物理屏幕上

希望这个比喻能帮你建立起清晰的概念框架!

http://www.zskr.cn/news/1424468.html

相关文章:

  • 从喷头滴漏到AI节水37%:一个Lindy灌溉集群的30天自动化演进日记(含Prometheus监控看板+告警阈值SOP)
  • 基于Arduino与BNO055陀螺仪的桌面绘图机器人:从传感器融合到G代码解析
  • 别再傻傻分不清!用Python代码5分钟搞懂机器学习里的min和argmin
  • 用Python和SVM给水质‘看相’:手把手教你从200张水色图到水质分类模型
  • 从HDRi到游戏画面:手把手教你用Blender和Python预处理IBL环境贴图(含代码)
  • 单细胞分析入门:用Scanpy的AnnData对象管理你的数据,从h5ad读写到基础过滤
  • 从电容充放电到MOSFET驱动:一个被忽视的‘能量视角’与热设计陷阱
  • Claude技术债爆发前夜(2024Q2实测预警:87%企业已超临界阈值)
  • Buildroot实战:fsoverlay与rootfs.ext2挂载,嵌入式Linux文件集成双方案详解
  • 手把手教你用Python+sklearn生成分类报告:从数据准备到可视化呈现的完整流程
  • 原神帧率解锁终极指南:三步释放硬件性能,畅享丝滑游戏体验
  • 别再死记硬背了!用狼人杀和Python代码,5分钟搞懂Bagging和随机森林的核心思想
  • 数字产品全栈构建——工作流重构记录
  • 【2024全球AI融资黑匣子】:独家还原Claude闭门路演现场——6位LP真实提问记录+未披露财务模型推演
  • 文献阅读 260529-Burning Questions: Research Data, Tools, and Insights
  • 2026年当下,如何选择定州通风管道源头公司?这五家值得关注 - 2026年企业资讯
  • AI视频一键转笔记,用这个方法真的能一天看完100个视频
  • 鸿蒙开发-想画虚线和特效路径?PathEffect来帮忙
  • Claude产品需求文档黄金结构拆解:1份文档撬动3轮融资的关键数据锚点
  • 如何高效部署多语言语音合成:专业TTS模型转换实战指南
  • 全域通信链路智能化优化方案
  • HCSR04 RGB超声波传感器:从测距原理到动态灯光交互的Arduino实践
  • MCB900开发板电源噪声问题分析与解决方案
  • 爪云主机深度测评:2026年免备案海外主机的硬件配置与性能实测
  • Claude NPV分析仅限首批200家企业开放API调用权限——错过本轮将延后6个月接入金融合规沙盒
  • Meshroom免费开源3D重建软件:5步从照片到专业模型的完整指南
  • 智慧电力设备-电力巡线安全帽数据集,共约3437张张,标注格式为xml,本人用ylov5跑过,训练完检测效果可商用,电力安全帽检测数据集
  • BetterNCM终极安装指南:3分钟快速解锁网易云音乐完整插件生态
  • 2026年5月新发布:探寻智能水电气集中供料系统领域实力强劲的批发厂家 - 2026年企业资讯
  • 实战指南:用Python复现ICLR 2021的聚类友好表征学习(附Instance Discrimination与Feature Decorrelation代码)