android token机制_WmS详解(一)之token到底是什么?基于Android7.0源码

本文深入探讨了Android系统中Window Manager Service(WMS)中的token概念,从PopupWindow和SnackBar的使用引入,揭示了token作为IPC通信标识的重要性。文章详细分析了Activity、Window、WindowManager.LayoutParams和View中的token,指出它们多与Binder相关,用于实现WMS与应用程序进程及Activity Manager Service之间的通信。通过对不同类型的窗口添加时token的处理,阐述了token在系统窗口和应用窗口中的不同作用。
摘要由CSDN通过智能技术生成

做Android有些年头了,Framework层三大核心View系统,WmS、AmS最近在研究中,这三大块,每一块都够写一个小册子来介绍,其中View系统的介绍,我之前有一个系列的博客(不过由于时间原因,该系列尚未收尾,后续分析仍在探究中),小伙伴们自行查找。WmS和AmS这两个也需要我们一个小块一个小块来啃,那么今天我们就先来看看WmS中涉及到的一个小小的变量token,这个东西到底是什么?

缘起

token这个东西有过几年开发经验的小伙伴应该都清楚,即使没有认真研究过也至少遇到过,在我们使用PopupWindow的时候,这个里边有一个方法是showAtLocation,该方法第一个参数是一个View,但是这个View是当前页面的任意一个View,那么这个View是干什么用的呢?我们来看看这个方法的注释:

/**

* @param parent a parent view to get the {@link android.view.View#getWindowToken()} token from

* @param gravity the gravity which controls the placement of the popup window

* @param x the popup's x location offset

* @param y the popup's y location offset

*/

public void showAtLocation(View parent, int gravity, int x, int y) {

showAtLocation(parent.getWindowToken(), gravity, x, y);

}

我这里只列出了一部分注释,但是这一部分注释说的很明白了,使用View这个参数的目的是为了获取一个token。

OK,这个可能是很多小伙伴第一次间接用到token的情况,除了这里,在Android5.0中,有一个新控件,叫做SnackBar(android开发之SnackBar的使用),SnackBar在显示的时候也需要一个当前页面任意View,这里的目的和PopupWindow的原因类似,那么这个Token到底是什么?我们又为什么需要这样一个东西,OK,继续往下看。

上下求索

本篇博客实际上是为我后面全面介绍WmS做铺垫,所以在这里我暂时先不想用过多篇幅去介绍Window,Window我打算放到后面再说。我们这里就直接先来看什么是token。单从字面来理解,token有令牌、符号的含义,当我尝试去WmS中去寻找token变量的时候,在Android的framework层的好多个类中我都找到了,比如Activity中、Window中、WindowManager.LayoutParams中等等都有,我总结了如下一张表格:

a895a9185d2243d297d3ee3873718661.png

我们看到,这么多类中都定义了token这个东东,而且这个token竟然是一个IBinder对象ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值