Dialog异常总结

1、not attached to window manager

原因分析:dialog.show()或者dialog.dismiss()的时候activity已经销毁

解决办法:showdismiss之前判断activity状态

2、has leaked window(窗体泄漏)

原因分析:在activity销毁后dialog还存在着并持有activity引用

解决办法:利用lifecycle监听activity生命周期,在onDestroy中调用dismiss

3、异步线程中展示dialog导致UI界面无法退出

原因分析:所有UI操作都需要在UI线程中,所以show无效,而UI卡住是因为Dialog调用show的时候点击返回键会重定向到dismiss,但是dismiss调用的时候是通过handler发送消息,而异步线程默认是无法创建handler的,所以消息发不出去

解决办法:自定义dialog基类,在基类里面判断当前是否UI线程,如果不是就不调用show,并且在debug模式下toast提示

4、DialogFragment show引发IllegalStateException异常

原因分析:重复添加同一个dialogFragment到FragmentManager

解决办法:每次添加前先判断FragmentManager里面是否已经有这个对象了,没有的话再添加,并且添加的时候选择commitAllowingStateLoss

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值