Framework 底层学习:一个浅显易懂的WMS介绍,建议细读

  • 为所有窗口分配Surface: 客户端向WMS添加一个窗口的过程,其实就是WMS为其分配一块Surface的过程,一块块Surface在WMS的管理下有序的排布在屏幕上。Window的本质就是Surface,用于管理Surface的显示顺序、尺寸、位置和窗口动画。

  • 输入系统相关:WMS是派发系统按键和触摸消息的最佳人选,当接收到一个触摸事件,它需要寻找一个最合适的窗口来处理消息,而WMS是窗口的管理者,系统中所有的窗口状态和信息都在其掌握之中,完成这一工作不在话下。

WMS主要类介绍:

============================================================================

W类


WindowManagerService服务就可以通过它在内部所创建的WindowState对象的成员变量mClient来

要求运行在应用程序进程这一侧的Activity组件来配合管理窗口的状态,例如:

  1. 当一个Activity组件的窗口的大小发生改变后,WindowManagerService服务就会调用这个

    IWindow接口的成员函数resized来通知该Activity组件,它的大小发生改变了。

  2. 当一个Activity组件的窗口的可见性之后,WindowManagerService服务就会调用这个Iwindow

    接口的成员函数dispatchAppVisibility来通知该Activity组件,它的可见性发生改变了。

  3. 当一个Activity组件的窗口获得或者失去焦点之后,WindowManagerService服务就会调用这个

    IWindow接口的成员函数windowFoucusChanged来通知该Activity组件,它的焦点发生改变了。

Window类 \frameworks\base\core\java\android\view\Window.java


理解:

  • 它概括了Android窗口的基本属性和基本功能。

  • 每个App虽然都可以做到各不相同,但是作为有大量用户交互的系统,窗口之间必须要有统一的交互模式,这样才能减小用户的学习成本。这些共性比如title, action bar的显示和通用按键的处理等,Window类就抽象了这些共性。

  • 它定义了一组Callback,Activity通过实现这些Callback被调用来处理事件。

注意: 要和在WMS中的窗口区分开来,WMS中的窗口更像是App端的View。

具体作用:

  • 定义Callback接口,它包含一系列dispatchXxxx方法和一系列onXxxx方法,用于处理UI事件。

  • 定义了一些接口,如setContentView、findViewById()等。由PhoneWindow来实现。

WindowManager类

=================================================================================

  • WindowManager继承自ViewManager这个接口,这个接口主要有以下的实现子接口:

    addView()、updateViewLayout()、removeView();

    WindowManager可以添加view到屏幕,也可以从屏幕删除view。它面向的对象一端是屏幕,另一端就是View,通过WindowManager的 addView方法创建View,这样产生出来的View根据WindowManager.LayoutParams属性不同,效果也就不同了,比如创建系统顶级窗口,实现悬浮窗口效果。

  • 我们每次创建一个Activity的时候,同样也是要添加当前Activity的View到窗口上,这个View是DecorView,同样也是通过调用addview()方法来实现。具体在ActivityRecord.java里面的handleResumeActivity来实现的。

ViewRootImpl类

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值