【Android 源码解析】应用窗口Window的实现机制

Android解析Window机制 一、window介绍 什么是window 什么是view树?例如你在布局中给Activity设置了一个布局xml,那么最顶层的布局如LinearLayout就是view树的根,他包含的所有view就都是该view树的节点,所以这个view树就对应一个window。 Activity、popupWindow、Toast、dialog、menu都有自己的view树,分别对应不同的window view树是window的存在形式,window是view树的载体 window是view树的管理者,同时也是 阅读详情


一、前言:

【1】Android系统中窗口分为三类:

应用窗口:每个Activity对应的窗口;

子窗口:必须依附在应用窗口上的窗口;

系统窗口:由系统创建,不依赖任何应用窗口。

二、应用窗口的创建过程:

【1】初始化Window、WindowManager:

先回顾一下Activity的启动过程——由ActivityManagerService通过Bindler进程间通信机制向客户端进程ActivityThread发送创建新的Activity对象的通知,所有Activity的创建都在对应应用程序进程ActivityThread中完成。

在Activity创建完成后,会调用Activity的attach方法。


分析:

1、在attach方法中首先创建一个PhoneWindow,PhoneWindow是实现了抽象类Window的子类;

2、为PhoneWindow设置事件回调监听。由于设置了事件回调监听,Activity可以分发处理触摸事件;

3、为PhoneWindow设置窗口消失回调监听。由于设置了窗口消失回调监听,在Window消失后,可finish掉Activity;

4、将当前Activity的WindowManager对象设置给PhoneWindow;

5、Activity的WindowManager和PhoneWindow的WindowManager是同一个。

【2】添加View到应用窗口:

我们已经知道了Window是如何在Activity中创建,那么View是如何添加到Window上?

首先,先来看下setContentView的源码:


getWindow()得到的就是Activity的成员变量mWindow,也就是PhoneWIndow。而PhoneWindow的setContentView的实现过程就是将layout给inflate到window上。

【3】Activity添加窗口Window的过程:

前面已经讲完了“Window是如何添加view的”,“Window和Activity一一对应”,现在讲下“Activity是如何添加Window的”。

Activity是通过ActivityThread的handleResumeActivity来启动Activity:


可以看到是通过WindowManager的addView方法来对Window的View进行添加。




LS-Dyna模态分析实战:从模型构建到结果解读的全流程指南 本文提供了一份详尽的LS-Dyna模态分析实战指南。文章系统讲解了如何利用LS-Dyna内置的隐式求解器进行特征值求解,从模型构建、几何清理、材料与连接设置,到核心的边界条件与隐式求解控制(如*CONTROL_IMPLICIT_EIGENVALUE),最后完成计算并解读频率与振型结果。旨在帮助工程师在熟悉的环境中高效完成结构振动特性分析,为后续动态响应分析奠定基础。 阅读详情

相关推荐

Label Studio 图像分割自动标注接入教程:从模型预测到一键上传 Predictions

这篇文章详细介绍了如何使用Label Studio进行图像分割任务的自动标注流程。主要内容包括: 环境准备:安装Label Studio和模型推理依赖 项目配置:启动Label Studio服务,创建项目并配置BrushLabels标注界面 数据准备:导入待标注图片,获取API访问凭证 模型推理:运行训练好的分割模型生成预测mask 结果上传:将预测结果转换为Label Studio格式并通过API上传为Predictions 文章提供了完整的操作指南,包括: 详细的命令行参数说明 推荐的项目目录结构 标注

. 451

Android Window、PhoneWindow、WindowManager、Activity学习心得 第一弹

Android 视图窗口分析 主要讲述从Activity启动到Window创建的过程

大叔的愤怒,你驾驭不了 2360

Redis+Unity 数据库搭建

游戏中需要存放排行榜等数据,而且是实时存放,所以就涉及到数据库的问题。这里找服务器大神了解到可以用Redis来做存储,免费的效率极高。

chaixinke的专栏 879

android 回到桌面监听,Android PhoneWindowManager监听屏幕右侧向左滑动实现返回功能...

由于项目没有设计返回键,一旦进入别的应用,就无法回到桌面。只能通过串口输入input keyevent 4(返回键)来返回桌面,为了方便调试,在Framework 中监听手势,实现返回功能。在frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager中有这么一段代码mSystemGestures =...

weixin_39834281的博客 860

深度学习优化算法解析(Momentum, RMSProp, Adam)

之前看了很多人介绍网络的优化器optimizer,无奈很多都把简单的东西讲的复杂化了,不容易让人懂,恰好之前看过吴恩达老师的最新的课程,这里结合老师讲的和个人想法写一下,方便别人同时也为自己以后回顾吧。 深度学习的优化算法主要有GD,SGD,Momentum,RMSProp和Adam算法吧,还有诸如Adagrad算法,不过大同小异,理解了前面几个,后面的也就引刃而解了。GD算法,SGD算法以及m

willduan的博客 12万+

Linux 使用rm -rf /*命令后,恢复系统方法

Linux 使用rm -rf /*命令后,恢复系统方法 个人学习记录 这里实验环境采用的是radhel7.1的版本: 个人认为核心就是缺失什么组件,就从别的地方复制什么组件过来,先把系统拉起来,再慢慢恢复配置 进入救援模式 1、将/dev/sda两个分区分别挂载看看,里面的内容,有内容的就是根存在的分区 2、ifconfig eno16777777 192.168.8.2 3、从另外一台一样系统的根 。用 tar打包,一个个文件夹拷贝过来 4、到坏系统,scp另外一个系统的etc.tar.gz 5

weixin_43603476的博客 1万+

Android窗口机制(二)——Window,PhoneWindow,DecorView理解

Window public abstract class Window { public <T extends View> T findViewById(@IdRes int id) { return getDecorView().findViewById(id); } public abstract void setContentView(@Layout...

Flying snow 3140

LC滤波器设计实战:从理论计算到PCB布局的完整指南

滤波器是信号处理与电路设计中的基础组件,用于从复杂信号中提取特定频率分量或抑制干扰噪声。其核心原理基于电感(L)和电容(C)等无源元件的频率选择特性,通过特定的网络拓扑实现幅频与相频特性的塑造。在工程实践中,LC滤波器因其结构简单、可靠性高、成本可控,成为射频、模拟及电源电路中的关键技术手段。其设计价值在于将理论网络综合转化为可量产、高性能的硬件解决方案,广泛应用于通信系统、音频处理、电源净化和传感器信号调理等场景。本文聚焦于LC滤波器的工程设计全流程,深入剖析了巴特沃斯、切比雪夫等经典类型的选型权衡,并重

weixin_34194829的博客 273

android 监听界面变化,Android之页面有变化用onWindowFocusChanged来监听权限是否开启...

1 问题我们需要在Activity里面监听网络变化、热点是否开启和关闭、GPS服务是否开启、位置权限是否开启等一些列行为。2 思路方法一:如果是需要启动activity进行权限申请,我们可以用如下组合模式var intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)startActivityForResult(intent, REQUES...

weixin_42127835的博客 1988

vue + video.js 加载多种视频流(HLS、FLV、RTMP、RTSP)

由于需要在一个项目内接入多种常用的视频流,所以接触到video.js,这里就做个记录。vue安装就不讲了,直接从项目开始了。RTSP格式已测试,无法成功播放,浏览器就识别不了STSP协议(提供两个解决方案:第一个是通过后端去转格式。第二个方案就是安装插件/中间件。目前想用浏览器直接播放RTSP格式流,没有其他更好的解决方法。

qq_17627195的博客 1万+

飞行机械臂设计

其后对飞行机械臂系统的机 理模型和基于 ADAMS 的物理模型进行了控制系统的搭建,对于机理模 型,设计了三个输入通道,分别是俯仰力矩,翻滚力矩与偏航力矩,控 制量为翻滚角,俯仰角,偏航角。四旋翼无人机自身具有独特的优势,在无人机上增加机械臂,整个 机体系统相当于一架空中行动自如的空中机器人,可以适应更多的应用场合,能够实现空中抓取,运输载荷,巡航监视等任务。的函数模块如图 4-8 所示,可见输入为 U1,U2,U3,U4,分别对应总力矩,俯仰力矩,翻滚力矩,偏航力矩,控制 量为俯仰角,翻滚角,偏航角。

coldmood77的博客 2916

Android中View not attached to window manager错误的解决办法

原因基本都是Dismiss对话框的时候,Activity已经不再存在。 常发生这类Exception的情形都是,有一个费时的线程操作,需要在显示一个Dialog,在任务开始的时候显示一个对话框,然后当任务完成了再Dismiss对话框,如果在此期间如果Activity因为某种原因被杀掉且又重新启动了,那么当Dialog调用Dismiss的时候WindowManager检查发现Dialog所属的Ac

dcking的专栏 3150

SwinTransformer 改进:SSPCAB模块(2024最新改进方法)

SSPCAB(Spatial Pyramid Pooling with Channel Attention Block)是2024年提出的一种新型神经网络架构改进方法,专注于在保持高精度的同时显著降低计算复杂度和参数量。该方法通过创新的空间金字塔池化与通道注意力机制的结合,实现了网络结构的紧凑化和运算效率的大幅提升。核心创新点1. 混合空间金字塔池化(Hybrid Spatial Pyramid Pooling, HSPP)多尺度动态核池化:根据输入特征图尺寸动态调整池化核大小和步长交叉级联结构。

Henry的博客 1309

Android应用程序窗口设计之Window及WindowManager的创建

Android应用程序窗口设计之Window及WindowManager的创建 Android应用程序窗口设计之setContentView布局加载的实现 普法Android的Token前世今生以及在APP,AMS,WMS之间传递 Android应用程序窗口设计之窗口的添加

IT先森 3168

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

android 窗口管理机制

1概述 Android的窗口管理主要由Window, WindowManager, WindowManagerServic三者实现window是一个抽象的概念,它必须为其添加一个View实体才能被我们所看到,不管是Activity,Toast,还是其他的Dialog之类的组件,都必须放在window上。而如果我们要对window进行操作的话,就必须通过windowManager,事实上,对window的操作是通过WindowManagerServic来实现的,而WindowManager可以看做是一个管理者

qq_41818873的博客 2730

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Android应用setContentView与LayoutInflater加载解析机制源码分析

看见没有,我们其实只用分析setContentView(View view, ViewGroup.LayoutParams params)方法即可,如果你在Activity中调运setContentView(View view)方法,实质也是调运setContentView(View view, ViewGroup.LayoutParams params),只是LayoutParams设置为了MATCH_PARENT而已。我们可以看见Window类的setContentView方法都是抽象的。

2401_89722439的博客 905

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Android应用Activity、Dialog、PopWindow、Toast窗口添加机制及源码分析

【工匠若水 http://blog.youkuaiyun.com/yanbober 转载烦请注明出处,尊重劳动成果】1 背景之所以写这一篇博客的原因是因为之前有写过一篇《Android应用setContentView与LayoutInflater加载解析机制源码分析》,然后有人在文章下面评论和微博私信中问我关于Android应用Activity、Dialog、PopWindow加载显示机制是咋回事,所以我就写

工匠若水 4万+

Android 的 Window 如何理解?Dialog 到底是不是子窗口?

d袋鼠b | 作者承香墨影 | 编辑https://juejin.cn/post/6952341892721803294 | 原文一、序Hi,大家好,这里是承香墨影!我们在实现 Andro...

承香墨影的博客 2638

PyFlink DataStream 窗口机制全解析:pyflink.datastream.window 模块 API 与源码实战指南

窗口(Window)是流处理中把无界数据流切分为有限桶(bucket)的核心抽象,也是 PyFlink DataStream API 实现滚动/滑动/会话/计数等统计逻辑的基础设施。本文以仓库中的 API 参考文档 [flink-python/docs/reference/pyflink.datastream/window.rst](https://link.gitcode.com/i/bd498

gitblog_00727的博客 869

Android窗口机制(一)初识Android的窗口结构

Android窗口机制系列 Android窗口机制(一)初识A...

weixin_33994444的博客 215

Android窗口机制:Window PhoneWindow DecorView

一,布局 在Android studio的Tools–>Layout Inspector–>选中连接的手机–>打开你要看的应用,然后在屏幕上就会显示当前页面的布局结构图View Tree 切换页面,会显示不同的页面的View Tree,然后会将View Tree保存在项目的captures目录下。 从上图我们可以看到,我的页面只有一个LinearLayout下的Text...

wangxp423的博客 4091

Android 中 Window 机制与 Window 抽象类 学习笔记

源码分析

刘之帅 357

Octop 飞牛NAS部署完整指南:一个 .fpk 包 5 分钟装好自托管 AI 助手

Octop 是腾讯开源的自托管 AI 助手,支持多用户、多智能体。这篇文章以飞牛 NAS 为场景,把 Octop 飞牛NAS部署 的完整流程按顺序走一遍:装 .fpk、建管理员、配模型密钥、跑通第一次对话,全程在飞牛的图形界面里完成。🐙 [![Octop 飞牛NAS部署完成后的对话界面](https://raw.gitcode.com/GitHub_Trending/oct/Octop/raw

gitblog_00098的博客 448
上一篇: 【Android 动画】仿淘宝加入购物车动画实现(附件demo)
下一篇: 【Android 源码解析】从源码角度深入理解Android中Dialog、PopUpWindow、Toast区别
Colin_Mindset
博客等级 码龄12年 159粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值