Framework 底层学习:一个浅显易懂的WMS介绍,2021大厂Android面试题精选

W类


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

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

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

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

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

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

  1. 当一个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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值