繁体   English   中英

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

[英]how to finish all activities and close the application in android?

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

Home->screen 1->screen 2->screen 3->screen 4->screen 5>Home->screen 2->Home->Screen 3

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

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

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

这对我很有效。

  • 您应该使用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);
  • CloseActivity活动的onCreate()方法。

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

使用将完成当前活动和所有父活动的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

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

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
}

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

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

有时finish()不起作用

我已经解决了这个问题

finishAffinity()

不要使用

System.exit(0);

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM