Activity.finishAffinity() 对比 Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK

Activity.finishAffinity() vs Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK

在 Android 中,如果您想清除当前的 Activity 堆栈并启动新的 Activity(例如,退出应用程序并启动登录 Activity),似乎有两种方法。

如果您的目标 API 等级高于 16,两者之间有什么优势吗?

1) 完成亲和力

从 Activity 调用 finishAffinity()Activity.finishAffinity

2) 意图标志

Intent intent = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();

finishAffinity()方法适用于>=API16.

Intent flags 方法适用于 >= API 11.

明确地说,为了清除当前 Activity 堆栈,这两种方法似乎也同样有效。我的问题是人们是否遇到过任何一个问题,因此,是否有任何理由选择其中一个而不是另一个?

你应该为此使用意图标志。

如果你有一大堆活动怎么办,你会从每个活动中调用来完成它们吗?

直接调用 Intent 会更好更容易。

希望对您有所帮助。

试试这个

Intent.FLAG_ACTIVITY_CLEAR_TOP

它清除之前活动的堆栈

在功能上,没有区别,但在 GenyMotion 上进行测试时,似乎存在轻微的视觉差异。见网播:https://drive.google.com/file/d/0B8Y77sY7Y2CGRS02c3UyNjd2MGs/view?usp=sharing

您需要在一系列设备上进行尝试,以了解它的一致性。

主观上,我会说使用 finishAffinity(),因为它更明确。但是,如果您必须支持 < SDK 16,您真的别无选择。

如果API >= 21, 您可以使用以下命令:

finishAndRemoveTask ();

完成此任务中的所有活动并将其从最近的任务列表中删除。

https://developer.android.com/reference/android/app/ActivityManager.AppTask.html