android window窗口,Android Window 三 创建应用窗口

创建应用窗口

一、创建Activity

1. 应用窗口必须对应Activity,AMS通知客户端ActivityThread启动Activity 。反射创建Activity对象

二、创建Window

2. activity.attach()方法设置内部变量。

3. activity.attach()方法创建Window对象。PolicyManager.makeNewWindow()创建(通过com.android.internal.policy.impl.Policy配置)创建PhoneWondow,赋值给Activity.mWindow

设置setCallback() [ Window的calback为当前Activity,就是为什么用户消息能够传递到Activity中的原因 ]

4. Window.mWindowManager赋值。WindowManager是一个接口,两个实现类Window.LocalWindowManager(是一个壳,其具体实现在其内部的WindowManagerImpl中) 与 WindowManagerImpl

三、创建ViewRoot

5. 添加View,从performLaunchActivity内部调用callActivityOnCreate开始,最终调用onCreate中的setContentView。

setContentView源码getWidnow.setContentView()

installDecor() 创建标题栏等

6. setContentView源码 ,分析Theme相关设置

7. Activity准备好后通知AMS,AMS最终调用Activity.makeVisible()

8. Activity.makeVisible()源码,窗口类型是TYPE_APPLICATION。 ViewGroup.addView 中“关卡” 判断WindowManager层级

9. LocalWindowManager.addView(WindowManagerImpl.addView一个应用仅有一个此对象),其中包含3个数组。通过ViewRoot.setView完成关键添加工作。

四、窗口添加

10. 数组mViews、mRoots、mParams 各保存View、ViewRoot、WindowManager.LayoutParams

11. 执行ViewRoot.setView 完成最后的窗口添加工作。

mAttachInfo赋值,

requestLayout 发出界面重新布局请求

sWindowSession.add 通知WMS添加窗口

参考资料:

《Android 内核剖析》 第8章 8.3 创建应用窗口

图解Android - Android GUI 系统 (2) - 窗口管理 (View, Canvas, Window Manager)

android的窗口机制分析------UI管理系统 (Window层级)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值