理解WindowManager

240 阅读1分钟

Window、WindowManager和WMS的关系


WindowManager的关联类


一个进程中只有一个WindowManagerGlobal,可能会有多个WindowManagerImpl

Window的属性

1.Window的类型和显示次序

Window分类及Type值:Application Window(1-99),Sub Window(1000-1999),System Window(2000-2999)

类型定义在WindowManager的静态内部类LayoutParams中。

WMS会为窗口确定显示次序。

一般情况下,Type值越大则Z-Order排序越靠前,就越靠近用户。

2.Window的标志

也就是Flag,用于控制Window的显示,同样定义在WindowManager的静态内部类LayoutParams中。

三种设置方式:

Window.addFlags()

Window.setFlags()

WindowManager.addView()

3.软键盘相关模式

AndroidManifest/Activity属性android:windowSoftInputMode

getWindow().setSoftInputMode()

Window的操作

  • WindowManager处理部分,对于不同类型的窗口处理过程有所不同
  • WMS处理部分,对于三大类窗口的处理基本一致
  • 通过Session实现本地进程与WMS所在SystemServer进程的通信
  • 负责显示界面的是Surface,而不是窗口本身。
  • WMS将Surface交给SurfaceFlinger处理,SurfaceFlinger将这些Surface混合并绘制到屏幕上。