Android深入解析WindowManager

1 篇文章 0 订阅
1 篇文章 0 订阅

WindowManager体系关系      

       我们这里从Window(这里Window是个抽象概念)开始了解WindowManager,这些window都会与WindowManager建立关联,比如Activity、Toast、Dialog、PopupWindow等。

Activity中

PopupWindow中

那么这个WindowManager为何有如此大作用呢?我们看到WindowManager是一个接口并且继承ViewManager,而ViewManager中定义了三个功能方法,分别是add、update、remove,所以WindowManager是操作窗口添加、刷新和消失的管理类。

接下来看WindowManager的实现类WindowManagerImpl(ContextImpl.getSystemService()这里不再细说),这个类中我们看到又把操作交给了WindowManagerGlobal类,WindowManagerImpl只是起到桥接模式的作用。

再继续跟踪WindowManagerGlobal类,这里我们看addView

这里又出现了一个新的类ViewRootImpl,然后ViewRootImpl调用了setView()方法

这里mWindowSession是一个Binder对象,从这里开始通过Binder进程间通信,它的server端实现为Session,调用的是WindowManagerService(所在SystemServer进程)中,接着我们具体看一下WMS中Session做了什么。

Session中调用了WMS的addwindow()方法将自身传进去,每个应用程序都会对应一个Session,WMS会用一个ArrayList将这些Session保存起来,剩下的工作将交由WMS处理。

这里只截取方法名,具体可看源码。这个方法里主要做两件事,一是这个方法返回的是一个状态值,进行了一系列的权限、状态、窗口类型等;当然这只是一部分,另外一个重点是会通过Session向SurfaceFinger申请分配Surface以渲染绘制到屏幕上。

以上是通过分析add方式对WindowManagerService流程的浅析,其实类似,这里不再细说。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值