Dialog为何只能用Activity的Context

创建Dialog时应使用Activity的Context,否则可能抛出BadTokenException。非Activity Context(如Application Context)创建的Dialog缺少必要的WindowManager信息,导致无法正确显示。WindowManager的差异以及在添加窗口时对token的检查是问题的关键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Dialog为何只能用Activity的Context

如果使用非Activity的context来创建Dialog,会报异常:

WindowManager$BadTokenException: Unable to add window -- token null is not for an application

原因如下:

  1. 使用不同的context来获取的WindowManager是不一样的
mWindowManager = context.getSystemService(Context.WINDOW_SERVICE)

如果上述context是Application,实际调用的是ContextImpl.getSystemService,获取的WM是new WindowManagerImpl(display);即mParentWindow为null;
如果上述context是Activity,获取的WM是new WindowM

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值