我的应用经常抛出android.view.WindowException异常--
我的应用经常引发如下异常: E/WindowManager(6282):android.view.WindowManager:活动 com.myActivity已泄漏窗口 com.android.internal.policy.impl.PhoneWindow$DecorView@4479b710那个 原来是加在这里的 当主活动开始并启动任务时,应用程序将显示一个进度对话框。任务完成后,它将关闭“进度”对话框 我的代码如下。有人能帮我吗我的应用经常抛出android.view.WindowException异常--,android,Android,我的应用经常引发如下异常: E/WindowManager(6282):android.view.WindowManager:活动 com.myActivity已泄漏窗口 com.android.internal.policy.impl.PhoneWindow$DecorView@4479b710那个 原来是加在这里的 当主活动开始并启动任务时,应用程序将显示一个进度对话框。任务完成后,它将关闭“进度”对话框 我的代码如下。有人能帮我吗 public class MyActivity exten
public class MyActivity extends Activity {
private static int ID_DIALOG_PROGRESS = 2001;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity);
showDialog(ID_DIALOG_PROGRESS);
new MyTask().execute(null, null, null);
}
@Override
protected Dialog onCreateDialog(int id) {
if (id == ID_DIALOG_PROGRESS) {
ProgressDialog loadingDialog = new ProgressDialog(this);
loadingDialog.setTitle("");
loadingDialog.setMessage("");
loadingDialog.setIndeterminate(true);
loadingDialog.setCancelable(false);
return loadingDialog;
}
return super.onCreateDialog(id);
}
private class MyTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... arg0) {
/* Do something expensive here...*/
/* Start other activity*/
Intent intent = new Intent(MyActivity.this, OtherActivity.class);
startActivityForResult(intent, 1000);
}
return null;
}
protected void onPostExecute(Void arg0) {
dismissDialog(ID_DIALOG_PROGRESS);
}
}
}
公共类MyActivity扩展活动{
私有静态int ID_DIALOG_PROGRESS=2001;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.my_活动);
showDialog(ID\u DIALOG\u进度);
new MyTask().execute(null,null,null);
}
@凌驾
受保护的对话框onCreateDialog(int id){
如果(id==id\u对话框\u进度){
ProgressDialog loadingDialog=新建ProgressDialog(此);
loadingDialog.setTitle(“”);
loadingDialog.setMessage(“”);
loadingDialog.SetUndeterminate(true);
loadingDialog.setCancelable(假);
返回加载对话框;
}
返回super.onCreateDialog(id);
}
私有类MyTask扩展了AsyncTask{
@凌驾
受保护的Void doInBackground(Void…arg0){
/*在这里做一些昂贵的事情*/
/*开始其他活动*/
意向意向=新意向(MyActivity.this、OtherActivity.class);
startActivityForResult(意向,1000);
}
返回null;
}
受保护的void onPostExecute(void arg0){
dismissDialog(ID\u DIALOG\u进度);
}
}
}
大多数情况下,异常是从showDialog()调用引发的。另一次,dismissDialog()调用引发了异常
提前谢谢你 在关闭
onPostExecute()
中的对话框之前,您正在doInBackground()中启动一个新活动,这可能是导致对话框泄漏的原因。我会搬家的
Intent intent = new Intent(MyActivity.this, OtherActivity.class);
startActivityForResult(intent, 1000);
在dismissDialog()
之后调用onPostExecute()
,看看会发生什么。还有一个很好的做法,那就是尝试一下
dismissDialog(ID_DIALOG_PROGRESS);
否则,在某些情况下,如屏幕旋转后,对话框不再可用时,您可能会收到随机应用程序崩溃