进入界面,然后调用Dialog或者PopupWindow的show方法,会闪退,原因是当Activity.onCreate()等函数被调用时,界面与窗口管理服务的双向通信连接尚未建立,如果在此时构造弹出窗口则会抛出异常。因此,如果期望在界面组件展现之处便构造弹出窗口,可以将弹出窗口对象构造也转换成一个异步过程。
//进入界面就需要显示对话框,如果Activity没有创建完成,Activity还没完全显示出来就显示PopupWindow的话,会出现异常现象
//所以异步显示PopupWindow
final View mView = XXXActivity.this.getWindow().getDecorView();
try
{
//延时显示提示对话框,使对话框覆盖在加载数据的progressWindow上
mView.postDelayed(new Runnable()
{
@Override
public void run()
{
if (null != popWindow)
{
popWindow.showAtLocation(mView, Gravity.CENTER, 0, 0);
}
}
}, 500);
}catch (Exception e){
e.printStackTrace();
}