其他分享
首页 > 其他分享> > windowManager向window添加、更新、删除view过程

windowManager向window添加、更新、删除view过程

作者:互联网

目录

一、window和windowManager关系

二、几个关键列表

二、add、remove、updata

add过程

remove过程:

update过程:

三、Activity的window创建过程:


一、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方法里;

 

标签:windowManager,add,remove,window,添加,过程,view
来源: https://blog.csdn.net/yu_ren_/article/details/123126803