java showDialog()正在访问旧视图=>错误:活动已泄漏窗口[…]
我正在编写应用程序,我有以下场景: 首先,在从服务器加载数据时,我显示一个活动和一个ProgressDialog。我在线程中执行加载任务,因为我发现这是一个解决方案,因此对话框可以正确显示
showDialog(DIALOG_LOAD);
loadListThread = new Thread(new Runnable(){
@Override
public void run(){
service.execRequest();
loadingFinishedHandler.sendEmptyMessage(0);
MyActivity.this.dismissDialog(MyActivity.DIALOG_LOAD);
}
});
loadListThread.start();
线程完成后,我通知处理程序。同样,这是我发现的一个解决方案,可以在不在线程中的情况下访问活动中的视图
loadingFinishedHandler = new Handler(){
@Override
public void handleMessage(Message msg){
showList();
}
};
加载完成后,我检查是否正确接收数据。如果没有,我想显示一个错误对话框:
showDialog(DIALOG_ERROR);
我使用onCreateDialog方法调用对话框
public Dialog onCreateDialog(int dialogId){
switch(dialogId){
case DIALOG_LOAD:
String message = getString(R.string.load);
ProgressDialog loadDialog = new ProgressDialog(this);
loadDialog.setMessage(message);
loadDialog.setCancelable(false);
return loadDialog;
case DIALOG_ERROR:
String message = getString(R.string.error);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(errorMessage);
builder.setNeutralButton(getString(R.string.ok), null);
return builder.create();
}
return null;
}
问题是:如果我在加载数据时更改了手机的方向,然后会创建一个错误对话框,我会收到这条消息
Activity [...] has leaked window [...] that was originally added here
我明白为什么会这样。当我旋转手机时,视图被重新创建,showDialog()显然正在尝试访问旧视图。但我不知道如何修复它
有人有主意吗
编辑:解决了它:-) 我发现我可以阻止我的活动在方向改变时重新启动。我在这篇文章中读到过 Handling Runtime Changes
我在AndroidManifest中声明
安卓:configChanges="orientation"
我自己处理方向的变化。现在可以使用此方法处理这些更改
public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig);
}
但是对于我来说,没有必要添加任何代码
# 1 楼答案