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

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

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

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

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

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

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


当前回答

而不是使用finish()只需使用finishAffinity();

其他回答

Use:

Intent intent = new Intent(getApplicationContext(), Home.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

这将清除所有的活动在顶部的家。

假设你完成了登录屏幕,当用户登录时,home被创建了,然后所有的屏幕从1到5在那个上面。我发布的代码将返回到主屏幕,完成所有其他活动。你可以在意图中添加额外的内容,并在主屏幕活动中读取并完成它(也许可以从那里再次启动登录屏幕或其他内容)。

我不确定,但你也可以尝试登录这个标志。我不知道在这种情况下活动将如何安排。所以不知道它是否会清除屏幕下面的那些,包括你现在所在的,但这绝对是可行的。

当用户希望退出所有打开的活动时,他们应该按下一个按钮,加载应用程序启动时运行的第一个活动,清除所有其他活动,然后让最后一个活动完成。当用户按下退出按钮时,运行以下代码。在我的例子中,LoginActivity是程序中运行的第一个活动。

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);

上面的代码清除除LoginActivity之外的所有活动。然后将以下代码放入LoginActivity的onCreate(…)中,用于监听LoginActivity何时被重新创建并传递'EXIT'信号:

if (getIntent().getBooleanExtra("EXIT", false)) {
    finish();  
}

为什么在Android中创建退出按钮如此困难?

Android试图阻止你在应用程序中设置“退出”按钮,因为他们希望用户永远不会关心他们所使用的程序是否在后台运行。

Android操作系统开发人员希望你的程序能够在意外关机和关机的情况下存活下来,当用户重新启动程序时,他们会从停止的地方继续运行。因此,用户可以在使用应用程序时接到电话,并打开地图,这需要释放应用程序以获得更多资源。

当用户重新开始您的应用程序时,他们会在没有中断的情况下立即开始。这个退出按钮篡夺了活动管理器的权力,可能会导致自动管理的android程序生命周期出现问题。

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

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

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

它工作得很完美。

适用于API >= 15至API 23 简单的解决方案。

 Intent nextScreen = new Intent(currentActivity.this, MainActivity.class);
 nextScreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
 startActivity(nextScreen);
 ActivityCompat.finishAffinity(currentActivity.this);

我想我迟到了,但有一个简单而简短的答案。 Activity中有一个finishAffinity()方法,它将完成当前活动和所有父活动,但它只能在Android 4.1或更高版本中工作。

对于API 16+,使用

finishAffinity ();

16岁以下使用

ActivityCompat.finishAffinity (YourActivity.this);

希望能有所帮助!