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

本文概述了Android窗口加载流程,深入研究PhoneWindow、DecorView、ViewManager和WindowManagerGlobal等关键组件,探讨setContentView的内部逻辑,以及UI更新的主线程规则。通过SDK31源码,带你理解Activity Token与Dialog的关系和Toast的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

初识🙆‍♀️

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

窗口结构图😎
在这里插入图片描述

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

概念说明介绍😎

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

  • PhoneWindow

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

    PhoneWindow内部持有WindowManager以及DecorView

  • DecorView

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

  • ViewManager

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

  • WindowManager

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

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

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

  • WindowManagerImpl
    在这里插入图片描述

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

  • WindowManagerGlobal

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

  • ViewRootImpl

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

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

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

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pumpkin的玄学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值