Android:按下后退按钮退出应用程序

Elh*_*Gdz 37 android back-button exit

在我的应用程序中,我希望退出应用程序时按下后退按钮,这是我的代码:

@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();
    }
Run Code Online (Sandbox Code Playgroud)

它的工作正常,但是当我从应用程序退出时,它不会完全退出并显示带有我的应用程序徽标的空白页面,当我再次按下按钮从应用程序退出时,我该如何解决?

编辑:

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

@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();
    } 
Run Code Online (Sandbox Code Playgroud)

Rac*_*hra 103

当您按下然后完成当前活动(例如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);
Run Code Online (Sandbox Code Playgroud)

现在,您的活动A位于堆栈顶部,而您的应用程序在Backstack上没有其他活动.

现在,在您要实现onBackPressed以关闭应用程序的活动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);

        }

    }
Run Code Online (Sandbox Code Playgroud)

Handler在这里处理意外的背压,它只是显示一个Toast,如果在3秒内有另一个背压,它会关闭应用程序.


Md.*_*mun 44

试试这个:

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);
Run Code Online (Sandbox Code Playgroud)


Tar*_*ara 22

我有同样的问题,我有一个LoginActivity和一个MainActivity.如果我单击MainActivity中的后退按钮,应用程序必须关闭.所以我用OnBackPressed方法做了.此moveTaskToBack()与Home Button一样工作.它保留了Back堆栈.

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

}
Run Code Online (Sandbox Code Playgroud)

  • 一流的解决方案。荣誉! (2认同)

Kan*_*ngh 5

它表示您在开始此活动时在堆栈中的上一个活动.finish(); 在您调用此活动的行之后添加.

在您之前的所有活动中.当你开始新活动时 -

startActivity(I);
Run Code Online (Sandbox Code Playgroud)

finish();在此之后添加.