我的应用经常抛出异常,如下所示:
E / WindowManager(6282):android.view.WindowLeaked:Activity com.myActivity泄露了窗口 com.android.internal.policy.impl.PhoneWindow$DecorView@4479b710那个 最初是在这里添加的
当主要活动开始并启动任务时,应用程序会显示进度对话框。任务完成后,它将关闭进度对话框。
我的代码如下所示。有人能帮助我吗?
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);
}
}
}
大多数情况下,showDialog()调用抛出了异常。另一次,异常是从dismissDialog()调用抛出的。
提前谢谢!
答案 0 :(得分:6)
在doInBackground()
中关闭对话框之前,您正在onPostExecute()
开始新活动,这可能是导致对话框泄漏的原因。我会搬家
Intent intent = new Intent(MyActivity.this, OtherActivity.class);
startActivityForResult(intent, 1000);
在onPostExecute()
电话会议后到dismissDialog()
,看看会发生什么。
答案 1 :(得分:0)
这也是一个很好的做法,试一试......抓住
dismissDialog(ID_DIALOG_PROGRESS);
否则,在某些情况下,对话框不再可用,您可能会收到随机应用程序崩溃,例如屏幕旋转后。