如何完成所有活动并关闭android中的应用程序?

时间:2013-11-26 07:13:21

标签: android android-activity activity-stack

我的申请有以下流程:

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

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

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

11 个答案:

答案 0 :(得分:70)

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

答案 1 :(得分:15)

这适合我。

  • 您应该使用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);
    
  • {li>

    onCreate() CloseActivity活动的方法。

    @Override 
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        finish(); // Exit 
    }
    

答案 2 :(得分:2)

这适用于所有版本的我。 关闭所有以前的活动,如下所示:

Intent intent = new Intent(this, HomeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // this will clear all the stack
intent.putExtra("Exit me", true);
startActivity(intent);
finish();

然后在HomeActivity onCreate()方法中添加此内容以完成MainActivity

setContentView(R.layout.main_layout);

if( getIntent().getBooleanExtra("Exit me", false)){
    finish();
    return; // add this to prevent from doing unnecessary stuffs
}

答案 3 :(得分:2)

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

Intent intent = new Intent(getApplicationContext(), YourActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

答案 4 :(得分:2)

使用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

答案 5 :(得分:1)

您可以尝试使用Intent.FLAG_ACTIVITY_CLEAR_TASK http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TASK启动屏幕3

答案 6 :(得分:1)

有时finish()无法正常工作

我用

解决了这个问题

finishAffinity()

不要使用

System.exit(0);

它将完成app而不需要动画。

答案 7 :(得分:1)

您好,如果您处于片段状态并且不能按原样使用finish方法(因为finish应该可以解决您的问题),则可以在getActivity.finish()之后使用startActivity(intent);方法。 如果您不在片段中,则可以在finish()行之后直接使用startActivity(intent);

答案 8 :(得分:0)

在活动清单文件中添加android:noHistory="true"

答案 9 :(得分:0)

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

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

2)在清单文件的每个标记中设置android:launchMode =“singleInstance”

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

答案 10 :(得分:0)

public void onBackPressed() {
    super.onBackPressed();
    finishAffinity();
    System.exit(0);
}

可能是这种方法可以更好地用于关闭所有活动和清理设备内存。