简述WindowToken是什么 ?
WindowToken
是 Android 中一个特殊的标识符,用于唯一标识一个 Window
(窗口)与系统 WindowManager
之间的绑定关系。每一个窗口在添加到 WindowManager
中时,都会获取一个 WindowToken
。它在系统内部充当了窗口的身份标识,用来确保窗口的安全性和唯一性。
主要特点
- 唯一标识窗口:
- 每个
Window
在被创建并添加到WindowManager
时,系统会为其分配一个唯一的WindowToken
。这个WindowToken
是系统用来识别和管理该窗口的凭证。
- 每个
- 安全性:
WindowToken
在一定程度上确保了应用的窗口不能随意被其他应用或进程操作。只有持有该WindowToken
的进程才能对该窗口进行操作,例如更新、删除或修改布局。
- 窗口层级管理:
WindowToken
还用于管理不同类型窗口之间的层级关系。例如,Dialog
、Activity
或Toast
等窗口类型,它们的WindowToken
能帮助系统正确地管理窗口的显示优先级。
使用场景
- Activity窗口:
- 当
Activity
启动时,它的窗口会被赋予一个WindowToken
,并在WindowManager
中进行注册。 - 此
WindowToken
可用于后续窗口操作和系统交互。
- 当
- Dialog窗口:
- 当在
Activity
中显示Dialog
时,Dialog
窗口会共享Activity
的WindowToken
,以确保它们属于同一窗口上下文。
- 当在
- Toast 和其他悬浮窗口:
- 悬浮窗口(如
Toast
)也会有一个WindowToken
。对于这些窗口,系统需要使用特定的权限来确保它们能够在应用界面之外显示,WindowToken
在这里充当了权限和窗口类型的凭证。
- 悬浮窗口(如
总结
WindowToken
是 Android 系统用来管理窗口的一种凭证和标识,它保证了窗口的唯一性和安全性,并帮助 WindowManager
对各类窗口进行层级和权限管理。对于开发者来说,虽然 WindowToken
是一个底层机制,通常无需直接操作,但理解其作用有助于更深入理解窗口和视图系统的工作原理。