1、not attached to window manager
原因分析:dialog.show()或者dialog.dismiss()的时候activity已经销毁
解决办法:在show和dismiss之前判断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