您的位置:首页 > 其它

Window 和windowManager源码分析

2017-02-26 16:57 197 查看
所有需要显示在屏幕上的内容都要通过windowManager

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

他的具体实现类是windowManagerImpl类(桥接模式)

具体的实现是交给了windowManagerGlobal处理

WindowManagerGlobal Addview的过程

(每个window 都有对应的 VIEW VR )

检查参数是否合法

创建ViewRootImpl 并将 view添加到列表中 在其中有几个列表

ArrayList mviews window 对应view ArrayList

mRoots window 对应的 VR ArrayList mDyingview

被删除的view对象 ArrayList<> mParams window 对应的参数布局

通过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 方法通知视图已经改变。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: