一个非常好玩的问题-Dialog弹出失败

前提:DialogManager统一管理所有的弹窗弹出和消失,它是一个单例

现象:

MainActivity中点击一个按钮,弹出一个弹窗(因为一些奇怪的理由,导致实现的时候这个弹窗并不是用PopupWindow或者Dialog来实现,而是通过activity.window.decorView.addView的来展示的(ps:这导致后面分析的时候出现来一点点方向上的错误)),然后退出app(这时候并没有杀死app,直接finish掉的MainActivity),进来之后再次点击按钮,弹窗木有出现

排查问题:

点一次,然后退出,再进入,手贱点了两次,发现是由于DialogManager 队列阻塞导致的不显示,沿着这个方向找了会,发现好像没有问题

点一次,然后退出,再进入,再次点击,仍然没有显示,这时候队列并没有阻塞,addView执行了,难道addView出问题了吗?以前倒是遇到过addView不展示的问题,比如说LinearLayout设置的方向不对,子View超出了屏幕,或者addView的时候没有设置LayoutParams,又或者焦点问题。挨个排查发现,好像并不是,Debug发现addView成功了,但是没有显示出来。那就应该转换思路,第一次展示和第二次不展示区别在哪呢?

在于第二次的MainActivity和第一次的MainAcitivty不同!Debug发现

 

 

第一张图是展示的时候各个参数,第二张图是不展示的时候的各个参数。

奇了怪哉!两次的DecorView一样!MainActivity都被finish掉了,DecorView怎么能一样呢?

好吧,DialogManager(这是单例)中存了每次弹窗需要的Context,而由于退出app(这时候并没有杀死app,直接finish掉的MainActivity),所以DialogManager变量一直在,导致addView一直add到了原先已经被finish掉的MainActivity布局上。

小结:其实如果在调试的时候可以提前缕下思路,找重点(这儿的重点就是区别点),而不是钻牛角尖认死理的执着于某一个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值