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

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

现在我在每个屏幕上都有一个公共注销按钮

(主屏/ 1屏/ 2屏/ 3屏/ 4屏/ 5屏)

我想当用户点击注销按钮(从任何屏幕),所有屏幕将完成,一个新的屏幕登录将打开。

我已经尝试了几乎所有的FLAG_ACTIVITY来实现这一点。 我还通过一些答案在stackoverflow,但不能解决这个问题。 我的应用程序是在Android 1.6上,所以不能使用FLAG_ACTIVITY_CLEAR_TASK

有什么办法解决这个问题吗?


当前回答

从developer.android.com:

public void finishAffinity () 在API级别16中添加

Finish this activity as well as all activities immediately below it in the current task that have the same affinity. This is typically used when an application can be launched on to another task (such as from an ACTION_VIEW of a content type it understands) and the user has used the up navigation to switch out of the current task and in to its own task. In this case, if the user has navigated down into any other activities of the second application, all of those should be removed from the original task as part of the task switch.

请注意,此结束不允许您向前一个活动交付结果,如果您试图这样做,则会抛出异常。

其他回答

如果你在之前的活动中使用startActivityForResult(),只需覆盖OnActivityResult()并调用finish();方法里面的所有活动..这就可以了……

在启动你的新活动之前,只需添加以下代码:

finishAffinity();

或者如果你想让它在以前的Android版本中工作:

ActivityCompat.finishAffinity(this);

简单地说,当您从登录屏幕离开时,而不是在完成登录屏幕时。

然后在所有转发活动中,使用这个来登出:

final Intent intent = new Intent(getBaseContext(), LoginScreen.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);

它工作得很完美。

我找到了这条路,它会清除所有历史并退出

Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
Intent intent = new Intent(getApplicationContext(), SplashScreen.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

finish();
System.exit(0);

对于注销按钮在应用程序的最后一个屏幕,使用注销按钮监听器上的这段代码来完成所有打开之前的活动,你的问题就解决了。

{
Intent intent = new Intent(this, loginScreen.class);
ntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}