拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

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

返回列表