栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android窗口机制:一、初始,熟悉Android窗口机制概况。(源码版本SDK31)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android窗口机制:一、初始,熟悉Android窗口机制概况。(源码版本SDK31)

新年好呀,新的一年做点什么呢?就梳理一下Android底层源码吧。先从窗口机制开始吧,目录如下:

Android 窗口机制 SDK31源码分析

初识DecorView与SubDecor的创建加载Window与Window Manager的创建加载ViewRootImpl的创建以及视图真正加载ViewRootImpl的事件分发一定要在主线程才可以更新UI吗?为什么?Activity的Token和Dialog的关系Toast机制总结 初识‍♀️

接下来的几篇文章会详细的介绍窗口加载过程,本篇文章整体介绍Android 窗口类整体结构关系图。

窗口结构图

好像和大家平时看到的窗口架构图不一太一样是吧,因为我看到sdk31的源码里,setContentView会委托给AppCompatDelegateImpl的setContentView进行处理。而在AppCompatDelegateImpl的setContentView方法里面,额外添加了一层SubDecor。这一块大家可以先看看,之后都会进行详细的源码分析。

概念说明介绍

这里大概介绍一下后续进行源码分析时涉及到的相关类以及作用

PhoneWindow

每个Activity都会持有一个Window的实例,而这个实例具体的实现类就是PhoneWindow;

PhoneWindow内部持有WindowManager以及DecorView

DecorView

DecorView继承自FramLayout,是当前Activity视图树的最顶层,它的作用是加载布局,被PhoneWindow持有。

ViewManager

ViewManager是activity中用来添加和移除View的接口,提供addView、updateViewLayout、removeView几个方法。

WindowManager

它继承自ViewManager,也是一个接口。所以它具备添加、删除和更新View。

WindowManagerImpl继承自WindowManager,但是具体却委托给了WindowsManagerGlobal来进行实现。

所以具体的窗口管理功能是由WindowsManagerGlobal来进行的。

WindowManagerImpl

WindowManager的具体实现,内部持有了mGlobal成员变量。它是WindowManagerGlobal类型的单例对象,具体的窗口管理功能是由WindowManagerGlobal来进行。

WindowManagerGlobal

WindowManager具体的实现。内部包含重要的对象ViewRootImpl,ViewRootImpl作为

ViewRootImpl

ViewRootImpl 在 WindowManagerGlobal 调用 addView() 方法后初始化 ViewRootImpl。

作为view和WindowManager的一个桥梁。比如上面所说的DecorView将会添加到ViewRootImpl 中,通过WindowManager进行实际的管理工作。WindowManagerImpl -> WindowManagerGlobal -> ViewRootImpl->View

ViewRootImpl除了执行我们熟知的performMeasure、performLayout、performDraw,另外它还执行事件分发,首先将事件分发到Activity。

上面对窗口机制相关做了概述,后续将依照定制的目录进行源码解析。
创作不易,如有帮助一键三连咯‍♀️。欢迎技术探讨噢!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/734955.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号