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

时间:2013-12-15 06:39:46

标签: android exit back-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();
    }

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

编辑:

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

@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();
    } 

13 个答案:

答案 0 :(得分: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);

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

现在,在您要实现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);

        }

    }

处理程序在这里处理意外的背压,只显示Toast,如果在3秒内再次按下,则会关闭应用程序。

答案 1 :(得分: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);

答案 2 :(得分:19)

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

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

}

答案 3 :(得分:5)

这意味着您在开始此活动时,您之前在堆栈中的活动。添加finish(); 在您调用此活动的行之后。

在之前的所有活动中。当你开始像 -

这样的新活动时
startActivity(I);

在此之后添加finish();

答案 4 :(得分:3)

据我了解,谷歌希望Android能够处理内存管理并关闭应用程序。如果您必须从代码中退出应用程序,那么请求Android运行垃圾收集器可能是有益的。

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

您还可以在代码中添加finish(),但如果您也执行System.exit(0)

,则可能是多余的

答案 5 :(得分:1)

完成不会关闭应用程序,它只是关闭活动。如果这是启动器活动,那么它将关闭您的应用;如果没有,它将返回上一个活动。

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

答案 6 :(得分:1)

这个对我有用。我通过结合其他答案自己找到了

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);
}

答案 7 :(得分:1)

似乎没有人在manifest.xml中推荐noHistory =“true”以防止在按下后退按钮后出现某些活动,默认调用方法完成()

答案 8 :(得分:1)

尝试

Intent a = new Intent(Intent.ACTION_MAIN);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);

答案 9 :(得分:0)

而不是finish()来电super.onBackPressed()

答案 10 :(得分:0)

为了在按下后退按钮退出应用程序,您必须首先清除所有热门活动,然后启动Android手机的ACTION_MAIN

所以,你必须只写下面提到的所有这些代码:

注意:在您的情况下,MainActivity将被YourActivity取代

@Override
public void onBackPressed() {

        new AlertDialog.Builder(this)
                .setTitle("Really Exit?")
                .setMessage("Are you sure you want to exit?")
                .setNegativeButton(android.R.string.no, null)
                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        MainActivity.super.onBackPressed();
                        quit();
                    }
                }).create().show();
    }


public void quit() {
        Intent start = new Intent(Intent.ACTION_MAIN);
        start.addCategory(Intent.CATEGORY_HOME);
        start.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        start.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(start);
    }

答案 11 :(得分:0)

<块引用>

我找到了很好的解决方案

import requests
from bs4 import BeautifulSoup as BS
url = 'https://newweb.nepalstock.com/floor-sheet'
agent = {"User-Agent":'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (HTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'}
page = requests.get(url, headers=agent)
print(BS(page.content, 'lxml'))

[Website image]
  [1]: https://i.stack.imgur.com/Glflp.png

答案 12 :(得分:-7)

使用此代码非常简单的解决方案

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