Android 开发艺术探索 读书笔记8

第八章,理解Window和WindowManager   P309

8.1Window是分层的,每个Window都对应的z-oredered,层级大的会覆盖在层级小的上面。应用类层级范围1~99、子Window的层级范围1000~1999,系统Window的层级范围2000~2999,这些层级范围对应着WindowManager.LayoutPrams的type参数。

WindowManager继承ViewManager所提供的方法

添加View addView(View,ViewGroup.LayoutParams params)   

更新View updateViewLayout(View view,ViewGroup.LayoutParams params)

删除View removeView(View view) 

8.2Window的内部机制

每一个Window都对应着一个View和一个ViewRootImpl,Window和View是通过ViewRootImpl来建立联系,Window是以View的形式存在。

1.Window的添加过程 

通过WindowManager的addView来实现。WindowManager是一个接口实现类WindowManagerImpl 。这个类交给WindowManagerGlobal来处理。

WindowManagerGlobal的addView实现过程:(1)检查参数是否合理,如果是子Window还需要调整一些布局参数

(2)创建ViewRootImpl并将View添加到列表中。存储View的表,存储ViewRootImpl得表,存储正在被删除的View的表等

(3)通过ViewRootImpl来更新界面并完成Window的添加过程。

2.删除过程WindowManagerImpl交给WindowManagerGlobal来处理 removeView首先通过findViewById来查找待删除View的索引(数组遍历)然后通过removeViewLocked来做进一步的删除。P317

3.更新过程WindowManagerGlobal的updateViewLayout方法  首先更新View的LayoutParams并替换掉老的,接着更新ViewRootImpl的LayoutParams,通过setLayoutParams方法实现。

8.3Window的创建过程

1.ActivityWindow的创建过程P320

2.Dialog的Window的创建过程P323

3.Toast的Window创建过程P326

    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值