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添加窗口
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值