【Android】Android UI显示原理

本文深入探讨了Android UI显示的工作原理,从Window、WindowManager、ViewRootImpl到Choreographer,详细阐述了Surface、WindowManagerService、WindowState和WindowToken的角色。内容还包括SurfaceFlinger如何进行UI渲染,以及SurfaceControl、SurfaceComposerClient和Layer在这一过程中的作用。
摘要由CSDN通过智能技术生成

一、window相关

Window可以说是Android Framework层提供的一个最基础的UI组件管理类,PhoneWindow是它的唯一实现类。它屏蔽了开发者与WindowManagerService的交互,统一了UI设计,并统一接收用户交互事件,比如背景、title和按键事件等。

Activity/Dialog/Toast的UI展现都是依赖于Window来完成。对于UI编写,开发者只需要使用View相关即可。View最终会以ContentView的形式设置给Window:

PhoneWindow.java

  public void setContentView(int layoutResID) {
   
  }

DecorView是PhoneWindow的根ViewGroup。Window提供了一些列的配置项,不同的配置项DecorView的UI组成会有一定的不同。

二、WindowManager

一个Window会有一个WindowManager。提到WindowManager就要提到WindowManagerGlobal。他们之间的区别是:

WindowManager : 它负责管理一个Window,并提供一系列对Window进行配置的flag。
WindowManagerGlobal : 它是一个单例类,负责管理应用所有的Window(其实并不是很严谨,应该是管理所有的ViewRootImpl)。并且它含有与WindowManagerService通信的Binder。
WindowManager所提供的API其实都是用来操作WindowManagerGlobal中的ViewRootImpl。比如WindowManager.addView(contentView)实际上是在WindowManagerGlobal中创建了一个与contentView对应的ViewRootImpl。

三、VIewRootImpl

它负责管理一个具体的View Tree,比如DecorView及其所有子View。具体有下面这些职责:

通过与WindowManagerSe

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值