logcat的:
06-13 18:25:37.534: E/WindowManager(420): Activity com.dimensionsco.thankbunny.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@43ef3c98 that was originally added here
这是我用于通过警告对话框退出应用程序的代码。但它最终会出错。我不明白我哪里出错了。我在模拟器上运行它。谁能解决这个问题?提前致谢
@Override
public void onStop() {
super.onStop();
Toast.makeText(getBaseContext(), "stop", Toast.LENGTH_LONG).show();
AlertDialog.Builder alertDialogBuilde = new AlertDialog.Builder(MainActivity.this);
alertDialogBuilde.setTitle(this.getTitle() + "EXIT");
alertDialogBuilde.setMessage("DO you want to exit?");
AlertDialog alertDialogr = alertDialogBuilde.create();
alertDialogBuilde.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// go to a new activity of the app
dialog.cancel();
// finish();
}
});
alertDialogBuilde.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
// set neutral button: Exit the app message
alertDialogBuilde.setNeutralButton("Exit the app", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// exit the app and go to the HOME
System.exit(0);
// MainActivity.this.finish();
}
});
alertDialogr.show();
}
答案 0 :(得分:2)
您无法在onStop()
中创建用户界面或与用户互动。请参阅Activity Lifecycle documentation。在执行onStop()
时,活动已经不可见并且正在被释放,因此您无论如何都无法中断该过程。更糟糕的是,如果你可以在这里互动,那么你的finish()
会再次调用onStop()
......
如果您需要拦截用户启动的退出,请覆盖onBackPressed()
并在那里提示您的对话框。
请注意,由于各种原因(包括拨打电话),活动可能会暂停和停止。您当然不希望用户必须确认您的提示才能接听他的电话......
答案 1 :(得分:0)
您可以在此处从对话框中完成活动,但警报不会被破坏,因此会泄漏。您需要先关闭对话框,然后完成活动。
alertDialogBuilde.setNeutralButton("Exit the app", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// exit the app and go to the HOME
System.exit(0);
// MainActivity.this.finish();
}
});
答案 2 :(得分:-2)
System.exit(0)不是关闭活动的好主意,而是调用finish(); System.exit调用垃圾收集器,然后除了垃圾回收器之外别无其他。所有其他正在运行的进程将在gc期间暂停。该方法仅应用于非常必要的原因。
但是,请发布完整的Logcat输出,以便这里的人可以准确地看到发生了什么。也许我们需要查看更多代码,以了解问题所在。
无论如何,这个错误发生的原因可能是,你没有在完成之前关闭你的对话框。所以你必须做以下事情:
alertDialogBuilde.setNeutralButton("Exit the app", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// exit the app and go to the HOME
dialog.cancel();
finish();
// MainActivity.this.finish();
}
});