目录
一、window和windowManager关系
二、几个关键列表
二、add、remove、updata
add过程
1.检查参数是否合法,如果是子window那么还需要调整一些布局参数
2.创建viewRootImpl,并将view添加到列表中(注意,这里存储view的是一个列表,代表可以添加多个view)
3.通过viewRootImpl来更新界面(setView),并完成window的添加过程(WindowSession(binder) --> session(用WMS))
remove过程:
1.findViewLocked
2.removeViewLocked(removeView(使用rootViewImpl的die(发送个异步消息后返回,最后会将view添加到mDyingView,最后是doDie方法删除 )方法), removeViewImmediate)
删除工作:
update过程:
1.更新view的layouParams
2.更新mParams
2.更新viewRootImplParams(setLayoutParams())
viewRootImpl会调用scheduleTraversals对view重新布局;
并且通过session更新window视图,这个过程最终会由WMS的relayoutWindow()来具体实现
三、Activity的window创建过程:
dialog和acitivity几乎一致,只是addView是在show方法里;