Activity 在进入下一个 activity 时已泄漏 window
Activity has leaked window when going to next activity
我试图在从一个 activity
到第二个 activity
时显示 Progress Dialogue
。不幸的是我一直收到这个错误:
05-17 17:58:30.274 29115-29115/me.tb.player E/WindowManager﹕ android.view.WindowLeaked: Activity me.tb.player.SkeletonActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{1ec8d3e2 V.E..... R......D 0,0-1026,288} that was originally added here
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:363)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:261)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.app.Dialog.show(Dialog.java:298)
at me.tb.player.SkeletonActivity$GetProgress.onPreExecute(SkeletonActivity.java:1140)
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
at android.os.AsyncTask.execute(AsyncTask.java:535)
at me.tb.player.SkeletonActivity.onClick(SkeletonActivity.java:1178)
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:160)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
发生的事情是 AlertDialog
弹出,如果用户单击“是”,则会转到下一个 activity
。
private class GetProgress extends AsyncTask<Void, Void, Void> {
ProgressDialog dialog1;
protected void onPreExecute() {
super.onPreExecute();
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
dialog1 = new ProgressDialog(new ContextThemeWrapper(
SkeletonActivity.this, android.R.style.Theme_Holo_Light_Dialog));
} else {
dialog1 = new ProgressDialog(SkeletonActivity.this);
}
dialog1.setCanceledOnTouchOutside(false);
dialog1.show();
}
protected Void doInBackground(Void... params) {
runOnUiThread(new Runnable() {
@Override
public void run() {
updateScore();
clearText();
turnComplete();
}
});
return null;
}
protected void onPostExecute() {
dialog1.dismiss();
}
}
这里是 Dialogue
:
public void messageAtEndOfTurn(String message) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setMessage(message);
alertDialogBuilder.setCancelable(false).setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
GetProgress getProgress = new GetProgress();
getProgress.execute();
}
}
}).setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
clear();
}
});
mAlertDialog = alertDialogBuilder.create();
mAlertDialog.show();
}
我认为这个问题与在 Alert Dialog
转到下一个 activity 时没有正确调用 dismiss
有关。或者我的 Progress Dialog
有错误。有人可以帮忙吗?
或者,当从一个 activity
转到下一个时,是否有更简单的方法来制作 Progress Dialog
- 我真的需要使用 AsyncTask
吗?
您必须关闭对话框才能完成当前 activity。
我试图在从一个 activity
到第二个 activity
时显示 Progress Dialogue
。不幸的是我一直收到这个错误:
05-17 17:58:30.274 29115-29115/me.tb.player E/WindowManager﹕ android.view.WindowLeaked: Activity me.tb.player.SkeletonActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{1ec8d3e2 V.E..... R......D 0,0-1026,288} that was originally added here
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:363)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:261)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.app.Dialog.show(Dialog.java:298)
at me.tb.player.SkeletonActivity$GetProgress.onPreExecute(SkeletonActivity.java:1140)
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
at android.os.AsyncTask.execute(AsyncTask.java:535)
at me.tb.player.SkeletonActivity.onClick(SkeletonActivity.java:1178)
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:160)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
发生的事情是 AlertDialog
弹出,如果用户单击“是”,则会转到下一个 activity
。
private class GetProgress extends AsyncTask<Void, Void, Void> {
ProgressDialog dialog1;
protected void onPreExecute() {
super.onPreExecute();
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
dialog1 = new ProgressDialog(new ContextThemeWrapper(
SkeletonActivity.this, android.R.style.Theme_Holo_Light_Dialog));
} else {
dialog1 = new ProgressDialog(SkeletonActivity.this);
}
dialog1.setCanceledOnTouchOutside(false);
dialog1.show();
}
protected Void doInBackground(Void... params) {
runOnUiThread(new Runnable() {
@Override
public void run() {
updateScore();
clearText();
turnComplete();
}
});
return null;
}
protected void onPostExecute() {
dialog1.dismiss();
}
}
这里是 Dialogue
:
public void messageAtEndOfTurn(String message) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setMessage(message);
alertDialogBuilder.setCancelable(false).setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
GetProgress getProgress = new GetProgress();
getProgress.execute();
}
}
}).setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
clear();
}
});
mAlertDialog = alertDialogBuilder.create();
mAlertDialog.show();
}
我认为这个问题与在 Alert Dialog
转到下一个 activity 时没有正确调用 dismiss
有关。或者我的 Progress Dialog
有错误。有人可以帮忙吗?
或者,当从一个 activity
转到下一个时,是否有更简单的方法来制作 Progress Dialog
- 我真的需要使用 AsyncTask
吗?
您必须关闭对话框才能完成当前 activity。