按下后退出Android应用程序

时间:2014-01-21 08:54:53

标签: android

我正在构建一个Android应用程序。按下后退时如何退出Android应用程序。 Android版本为2.3.3及以上版本。 Android应用程序转到以前我不想要的活动。

13 个答案:

答案 0 :(得分:33)

试试这个

public void onBackPressed(){
Intent a = new Intent(Intent.ACTION_MAIN);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);

}

答案 1 :(得分:27)

有些活动实际上你不想在按下后退按钮时再次打开这样的Splash Screen Activity,欢迎屏幕活动,确认Windows。实际上你在活动堆栈中不需要这个。你可以用=>做到这一点打开manifest.xml文件并添加属性

  

机器人:noHistory = “真”

参加这些活动。

<activity
    android:name="com.example.shoppingapp.AddNewItems"
    android:label="" 
    android:noHistory="true">
</activity>

OR

有时您希望在某些后退按钮中关闭整个应用程序。这里的最佳实践是打开主窗口而不是退出应用程序。为此,您需要覆盖onBackPressed()方法。通常这种方法会打开堆栈中的顶级活动。

@override
public void onBackPressed(){
Intent a = new Intent(Intent.ACTION_MAIN);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);
}

OR

按下后退按钮

您想要退出该活动,并且您也不想在活动堆栈中添加它。在onBackPressed()方法中调用finish()方法。它不会关闭整个应用程序。它将用于堆栈中的先前活动。

onBackPressed - 当活动检测到用户按下后退键时< - >

public void onBackPressed() {
  finish();
}

答案 2 :(得分:19)

我知道为时已晚,但没有人提到我使用的代码,所以它会帮助别人。

moveTaskToBack与Home Button相同。它保留了Back堆栈。

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

答案 3 :(得分:14)

您可以清除所有后台堆栈。

@Override
public void onBackPressed() {
    finishAffinity();
}

答案 4 :(得分:7)

如果历史记录中有多个屏幕,则需要忽略所有其他屏幕。 我建议使用这个:

@Override
public void onBackPressed() {

    finish();

}

答案 5 :(得分:6)

我找到了一个有趣的解决方案,可能会有所帮助。

我在onBackPressed()中实现了这一点

finishAffinity();
finish();

FinishAffinity删除现有活动与其堆栈的连接。然后完成操作可以帮助您退出该活动。最终将退出应用程序。

答案 6 :(得分:5)

// Finish current activity
// Go back to previous activity or closes app if last activity
finish()

// Finish all activities in stack and app closes
finishAffinity()

// Takes you to home screen but app isnt closed 
// Opening app takes you back to this current activity (if it hasnt been destroyed)
Intent(Intent.ACTION_MAIN).apply {  
    addCategory(Intent.CATEGORY_HOME)
    flags = Intent.FLAG_ACTIVITY_NEW_TASK
    startActivity(this)
}

答案 7 :(得分:4)

通常情况下,您不应该关闭应用程序 - 用户将按回原点或通过按回来关闭您的活动将其移回。

但你可以使用这个提示:

1)如果不需要在后台堆叠中,则在启动新活动后关闭旧活动:

startActivity(newActivityIntent);
finish();

2)如果您需要http://developer.android.com/reference/android/app/Activity.html#moveTaskToBack(boolean)

,可以将任务移回(而不是关闭)

3)如果您真的需要它,可以使用System.exit(0),但强烈不推荐,并且通常会说您有应用程序的体系结构问题。

答案 8 :(得分:1)

弹出

     @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 OnClickListener() {

    public void onClick(DialogInterface arg0, int arg1) {
    WelcomeActivity.super.onBackPressed();
        }
    }).create().show();

}

将Class设置为应用程序的顶部而没有历史记录

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

在此输入代码双击

private static long back_pressed;
@Override
public void onBackPressed(){
if (back_pressed + 2000 > System.currentTimeMillis()){
super.onBackPressed();
}
else{
Toast.makeText(getBaseContext(), "Press once again to exit", 
Toast.LENGTH_SHORT).show();
back_pressed = System.currentTimeMillis();
}

}

答案 9 :(得分:0)

只需在您的意图下使用代码finish();即可关闭活动。所以,它不会再出现。这解决了我的问题

startActivity(new Intent(SplashActivity.this, MainActivity.class));
finish();

答案 10 :(得分:0)

科特琳:

 override fun onBackPressed() {
        val exitIntent = Intent(Intent.ACTION_MAIN)
        exitIntent.addCategory(Intent.CATEGORY_HOME)
        exitIntent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
        startActivity(exitIntent)
    }

其他代码有问题,有些不起作用,有些需要API分类。

答案 11 :(得分:-1)

moveTaskToBack();现在已弃用... 而是使用: moveTaskToBack(true);

答案 12 :(得分:-1)

您可以使用此代码退出应用程序。

@override public void onBackPressed()

{

finishAffinity();

System.exit(0);

}