Android:按下button退出应用程序

在我的应用程序,我想退出从应用程序时按下button,这是我的代码:

@Override public void onBackPressed() { new AlertDialog.Builder(this).setIcon(android.R.drawable.ic_dialog_alert).setTitle("Exit") .setMessage("Are you sure you want to exit?") .setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }).setNegativeButton("No", null).show(); } 

它的工作是正确的,但是当我退出应用程序它不完全退出,并显示与我的应用程序标识的空白页面,当我再次按下button退出应用程序,我该如何解决?

编辑:

我使用这个代码而不是上面,但我的应用程序完全退出,但我希望它在后台运行,并不完全退出,我该怎么做呢?

 @Override public void onBackPressed() { new AlertDialog.Builder(this).setIcon(android.R.drawable.ic_dialog_alert).setTitle("Exit") .setMessage("Are you sure?") .setPositiveButton("yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); finish(); } }).setNegativeButton("no", null).show(); } 

当你按下后,然后你完成当前的活动(比如说A),你看到一个带有你的应用程序标志的空白活动(比如说B),这就意味着完成A之后显示的活动B仍然在后台, A是从活动B开始的,所以在活动中,你应该开始活动A,标志为

 Intent launchNextActivity; launchNextActivity = new Intent(B.class, A.class); launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); startActivity(launchNextActivity); 

现在,您的活动A在堆栈顶部,没有其他应用程序在后台的活动。

现在在你想实现onBackPressed来closures应用程序的活动A中,你可以做这样的事情,

 private Boolean exit = false; @Override public void onBackPressed() { if (exit) { finish(); // finish activity } else { Toast.makeText(this, "Press Back again to Exit.", Toast.LENGTH_SHORT).show(); exit = true; new Handler().postDelayed(new Runnable() { @Override public void run() { exit = false; } }, 3 * 1000); } } 

处理程序在这里处理偶然的​​背压,它只是显示一个Toast ,如果在3秒内有另一个背压,它closures应用程序。

尝试这个:

 Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//***Change Here*** startActivity(intent); finish(); System.exit(0); 

我有同样的问题,我有一个LoginActivity和一个MainActivity。 如果我点击MainActivity中的button,应用程序必须closures。 所以我用OnBackPressed方法做了。 这moveTaskToBack()工作与主页button相同。 它将Back堆栈保持原样。

 public void onBackPressed() { // super.onBackPressed(); moveTaskToBack(true); } 

这意味着当你开始这个活动时你以前的活动。 添加finish(); 在你打电话给这个活动之后。

在你以前的所有活动中。 当你开始新的活动,

 startActivity(I); 

添加finish(); 在这之后。

根据我的理解,Google希望Android能够处理内存pipe理并closures应用程序。 如果您必须从代码中退出应用程序,则可以让Android运行垃圾收集器。

 @Override public void onBackPressed(){ System.gc(); System.exit(0); } 

你也可以添加完成()到代码,但它可能是多余的,如果你也做System.exit(0)

完成不closures应用程序,它只是closures活动。 如果这是启动器的活动,那么它会closures你的应用程序; 如果不是,则会回到之前的活动。

你可以做的就是使用onActivityResult触发尽可能多的finish()来closures所有打开的活动。

没有人似乎在manifest.xml中推荐noHistory =“true”,以防止在按下默认调用方法finish()的button之后出现某个活动。

这一个为我工作,我通过结合其他答案自己find了

 private Boolean exit = false; @override public void onBackPressed(){ if (exit) { finish(); // finish activity } else { Toast.makeText(this, "Press Back again to Exit.", Toast.LENGTH_SHORT).show(); exit = true; new Handler().postDelayed(new Runnable() { @Override public void run() { // TODO Auto-generated method stub Intent a = new Intent(Intent.ACTION_MAIN); a.addCategory(Intent.CATEGORY_HOME); a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(a); } }, 1000); } 

finish()调用super.onBackPressed()

用这个代码很简单的解决scheme

  @Override public void onBackPressed() { super.onBackPressed(); // this line close the app on backpress }