Window 和windowManager源码分析

所有需要显示在屏幕上的内容都要通过windowManager

windowManager 是一个接口 三个方法 add remove update

他的具体实现类是windowManagerImpl类(桥接模式)
具体的实现是交给了windowManagerGlobal处理

WindowManagerGlobal Addview的过程
(每个window 都有对应的 VIEW VR )

  1. 检查参数是否合法
  2. 创建ViewRootImpl 并将 view添加到列表中 在其中有几个列表
    ArrayList mviews window 对应view ArrayList
    mRoots window 对应的 VR ArrayList mDyingview
    被删除的view对象 ArrayList<> mParams window 对应的参数布局
  3. 通过viewRootImpl 的SetView方法完成 SetView通过requestLayout 完成异步请求 接着通过windowSession 完成最终的window添加过程 mWindowSession
    是IwindowSession一个Binder对象 实现类是session (IPC调用)
    Session内部通过WMS来实现window 的添加 wms会为每一个应用保留一个session 由此进入到framework层

Activity 中window 的创建过程
1. Activty 所属的window 对象是同过PolicyManager的makenewWindow方法实现的
2. 策略类 真正的实现类是policy 而policy中makeNewWindow方法返回的是phoneWindow
由此可见window的具体实现是phoneWindow
至此Activity 的window已经创建完成
那么Activity 的视图是如何附属在window 上的呢?
1.看setContentView 方法
2.转移至Phonewindow 的setContentView 方法上
1.创建DecorView 顶级布局
2.将view 添加至mContentParent 上
3.回调Activity的onContentChanged 方法通知视图已经改变。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值