android window view

本文深入探讨了Android窗口系统,从PhoneWindow的DecorView开始,讲解了内容区域与标题栏的布局结构。内容涉及如何根据主题加载布局,以及Activity中的UI组件如何与Surface、SurfaceFlinger交互。同时,提到了ViewRoot、IWindowSession和WMS在窗口管理中的作用,展示了Surface的创建与更新流程。

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

 

PhoneWindow-->DecorView-->R.id.action_bar_overlay_layout-->R.id.content(正文)、R.id.action_bar_container(标题栏)

 

首先初始化mDecor,即DecorView为FrameLayout的子类。就是我们整个窗口的根视图了。
然后,根据theme中的属性值,选择合适的布局,通过infalter.inflater放入到我们的mDecor中。
在这些布局中,一般会包含ActionBar,Title,和一个id为content的FrameLayout。
最后,我们在Activity中设置的布局,会通过infalter.inflater压入到我们的id为android.R.id.content的FrameLayout中去(hierarchy看到两层FrameLayout的原因)

 

 

图8-4  一个Activity中的UI组件

 

 

 

 

图8-5  马良的神笔工作原理

结合之前所讲的知识,图8-5清晰地传达了如下几条信息:

·  ViewRoot有一个成员变量mSurface,它是Surface类型,它和一块Raw Buffer有关联。

·  ViewRoot是一个ViewParent,它的子View的绘画操作,是在画布Surface上展开的。

·  Surface和SurfaceFlinger有交互,这非常类似AudioTrack和AudioFlinger之间的交互。

 

 

 

图8-6  ViewRoot和WMS的关系

 

 

 

首先,来看IWindowSession.aidl对自己的描述:

·  System private per-application interface to the window manager:也就是说每个App进程都会和WMS建立一个IWindowSession会话。这个会话被App进程用于和WMS通信。后面会介绍它的requestLayout函数。

再看对IWindow.adil的描述:

·  API back to a client window that the Window Manager uses to informit of interesting things happening:这句话的大意是IWindow是WMS用来做事件通知的。每当发生一些事情时,WMS就会把这些事告诉某个IWindow。可以把IWindow想象成一个回调函数。

 

 

图8-9  Surface的精简流程图

 

 

 

 

图8-15  ShardBufferServer的示意图

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值