一次完成所有活动

ste*_*eve 56 android activity-finish android-activity

我有一个具有多个页面的应用程序,即多个活动,其中一些仍处于打开状态.

有没有办法一次关闭所有活动?

小智 121

每当您希望退出所有打开的活动时,您应该按下一个按钮,该按钮加载应用程序启动时运行的第一个活动,然后清除所有其他活动,然后完成最后剩余的活动.这样做在您的项目中应用以下代码

Intent intent = new Intent(getApplicationContext(), FirstActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

上面的代码完成除FirstActivity之外的所有活动.然后我们需要完成FirstActivity的输入在Firstactivity的oncreate中输入以下代码

if (getIntent().getBooleanExtra("EXIT", false)) {
    finish();
}
Run Code Online (Sandbox Code Playgroud)

你完成了......

  • Intent intent = new Intent(getApplicationContext(), LoginActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 开始活动(意图); (2认同)

Kin*_*ses 60

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

对于API 16+,请使用

finishAffinity();
Run Code Online (Sandbox Code Playgroud)

对于较低(Android 4.1较低),请使用

ActivityCompat.finishAffinity(YourActivity.this);
Run Code Online (Sandbox Code Playgroud)

  • 对于旧版Android,请使用[`ActivityCompat#finishAffinity()`](https://developer.android.com/reference/android/support/v4/app/ActivityCompat.html#finishAffinity(android.app.Activity)) . (4认同)

Mon*_*idi 23

我发现的最佳解决方案,与API级别<11的设备兼容

Intent intent = new Intent(getApplicationContext(), HomeActivity.class);
ComponentName cn = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);
startActivity(mainIntent);
Run Code Online (Sandbox Code Playgroud)

此解决方案需要Android支持库

  • 这应该是接受的答案!! (4认同)

小智 20

对于API 16+,请使用

finishAffinity();
Run Code Online (Sandbox Code Playgroud)

为了更低,使用

ActivityCompat.finishAffinity(YourActivity.this)
Run Code Online (Sandbox Code Playgroud)


Dip*_*iya 11

清晰的活动历史有三种解决方案.

1)您可以finish()通过意图在开始新活动时写作.

2)在Androidmanifest.xml文件android:noHistory="true"中的所有<activity>标签中写入,如果你打开了新的活动而没有写完finish(),那么之前的活动总是完成,写完你的活动就像这样.

<activity
    android:name=".Splash_Screen_Activity"
    android:label="@string/app_name"
    android:noHistory="true">

</activity>
Run Code Online (Sandbox Code Playgroud)

3)写入system.exit(0)退出应用程序.

  • system.exit(0)用于从应用程序退出:完美用于来自Broadcastreceiver的关闭活动 (2认同)

The*_*bhi 9

我正在努力解决同样的问题.打开about页面并finish();从那里打电话没有关闭应用程序而是去了之前的活动,我想从about页面本身关闭应用程序.

这是对我有用的代码:

Intent startMain = new Intent(Intent.ACTION_MAIN); 
startMain.addCategory(Intent.CATEGORY_HOME); 
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(startMain); 
finish();
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


Him*_*rma 7

None of the other answers worked for me. But I researched some more and finally got the answer.

You actually asked to close the app as I needed. So, add following code:


Has*_*ter 6

您可以使用finishAffinity()方法来完成当前活动和所有父活动。但这仅适用于API 16+

API 16+使用:

finishAffinity();
Run Code Online (Sandbox Code Playgroud)

在API 16以下使用:

ActivityCompat.finishAffinity(this); //with v4 support library
Run Code Online (Sandbox Code Playgroud)

要退出整个应用程序:

finishAffinity(); // Close all activites
System.exit(0);  // closing files, releasing resources
Run Code Online (Sandbox Code Playgroud)


Ajj*_*jji 5

以下两个标志为我工作。他们将清除之前的所有活动并开始新的活动

  Intent intent = new Intent(getApplicationContext(), MyDetails.class);
  intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
  intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。