26

我的应用程序具有以下流程:

首页->屏幕1->屏幕2->屏幕3->屏幕4->屏幕5>首页->屏幕2->首页->屏幕3

我的问题是,当我尝试关闭应用程序时,每次尝试关闭应用程序时都会打开 Home 活动。

当用户在主屏幕上按下设备的后退键时,我只想关闭应用程序。

4

9 回答 9

87

有完成当前活动和所有父活动的finishAffinity()方法,但它仅适用于 Android 4.1 或更高版本。

于 2013-11-26T07:16:46.360 回答
16

这对我很有效。

  • 你应该使用FLAG_ACTIVITY_CLEAR_TASKFLAG_ACTIVITY_NEW_TASK标志。

    Intent intent = new Intent(SecondActivity.this, CloseActivity.class);
    //Clear all activities and start new task
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent);
    
  • onCreate()活动方法CloseActivity

    @Override 
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        finish(); // Exit 
    }
    
于 2015-07-23T16:46:31.563 回答
7

使用finishAffinity()将完成当前活动和所有父活动的方法。但它仅适用于API 16+平均 Android 4.1 或更高版本。

API 16+ 使用:

finishAffinity();

API 16 以下使用:

ActivityCompat.finishAffinity(this); //with v4 support library

要退出整个应用程序:

finishAffinity(); // Close all activites
System.exit(0);  // Releasing resources
于 2018-06-02T21:19:58.730 回答
3

有时finish()不工作

我已经解决了这个问题

finishAffinity()

不使用

System.exit(0);

它将在没有动画的情况下完成应用程序。

于 2017-08-31T04:44:59.430 回答
2

要在打开新活动时清除所有活动,请执行以下操作:

Intent intent = new Intent(getApplicationContext(), YourActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
于 2016-11-15T09:55:01.257 回答
1

添加android:noHistory="true"您的活动清单文件。

于 2013-11-26T07:15:57.937 回答
1

嗨,如果您在片段中并且无法按原样使用完成方法(因为完成应该解决您的问题),那么您可以使用getActivity.finish()after 之后的方法startActivity(intent);。如果您不在片段中,则可以在行finish()后直接使用startActivity(intent);

于 2020-04-22T16:52:48.657 回答
0

有两种方法可以解决您的问题

1) 在每个活动的 startActivity(intent) 之后调用 finish()

2) 在清单文件的每个标签中设置 android:launchMode="singleInstance"

我认为第二种方法最适合解决问题,但您也可以使用第一种方法

于 2013-11-26T07:17:01.160 回答