View绘制流程学习--获取WindowManager的三种方式

方式一:Activity 直接获取(最常用)

源码位置:frameworks/base/core/java/android/app/Activity.java

//应用层代码- Activity 中获取windowManager-----activity与windowManagerImpl是一一对应的,windowManagerImpl是Activity专属的窗口管理者,WindowManagerImpl:管view的注册等(addview)Activity·getWindowManager()源码解析

方式二:PhoneWindow 创建 WindowManager

PhoneWindow.getWindowManager()源码

源码位置:frameworks/base/core/java/android/view/window.java(第1017-1019行)//Phonewindow

//Phonewindow是activity独有的窗口容器,用来管理view的布局结构

//windowManagerImpl(windowManager实体)用来管理view到窗口系统的注册

//两者从不同维度协作,共同完成Activity的窗口显示。可以理解成:两者都是窗口管理者,他们与activity都是一一对应的关系,一个 activity对应一个 Phonewindow,一个 activity对应一个windowManagerImp

window是抽象类,Phonewindow是他的具体实现类

方式三:Context.getSystemService()获取系统服务

Context获取 WINDOW_SERVICE 的实现

Context是"上下文"概念,Activity 是"界面上下文"

Activity 是 Context 的间接子类

继承关系如下:

代码调用链路

总结

Activity·通过attach()初始化时,创建Phonewindow和·WindowManagerImpl

相关推荐
AI_Gump1 小时前
Harness篇|DeepSeek Harness 上手机:五条安卓移植路线与 App 内 Linux 拆解
android·linux·人工智能·智能手机·deepseek
疯华整猫6 小时前
否决 Flutter 提案那天,我发现自己也说不清 Framework 管什么
android
传奇开心果编程19 小时前
【Flutter踩坑排雷】第25课:ScrollController 误用坑|跳转失效、监听泄漏与“控制器未附加”
android·flutter·ios·移动开发·跨平台·dart·声明式ui
慕容雪_1 天前
Capacitor8-Android打包完整手册
android·打包·capacitor
阿杰m1 天前
Android源码第十三章:Bluetooth——沿一次发现走到控制器
android
booboosui1 天前
派活给另一个 AI:前后两次文件夹快照,就是交付清单
android
普通人61 天前
MySQL_FIND_IN_SET函数详解
android·数据库·mysql
好的佩奇2 天前
Dart 之集合元素
android·flutter·dart
Easyhood2 天前
Android 开发入门实践(十四):Compose 副作用入门与四个常用 API
android·开发语言·kotlin·android jetpack·compose
FlightYe2 天前
音视频修炼之容器与协议(四):RTSP详解
android·linux·ffmpeg·音视频·dash