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

时间:2015-11-03 10:47:15

标签: android android-intent android-activity logout flags

在Android中,如果要清除当前的Activity堆栈并启动新的Activity(例如,退出应用并在Activity中启动日志),那么似乎有两种方法。

如果目标API级别高于16,那么一个优于另一个吗?

1)完成亲和力

从活动中调用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()方法适用于> = API 16。

Intent标记方法适用于> = API 11。

要明确的是,为了清除当前的Activity堆栈,两种方法似乎也同样有效。我的问题是,人们经历过哪些问题,因此有没有理由选择其中一个?

4 个答案:

答案 0 :(得分:12)

从功能上来说,没有什么区别,但在GenyMotion上测试它似乎有轻微的视觉差异。请参见网络广播:https://drive.google.com/file/d/0B8Y77sY7Y2CGRS02c3UyNjd2MGs/view?usp=sharing

您需要在一系列设备上尝试一下,看看它是多么一致。

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

答案 1 :(得分:0)

试试这个

foreach

它清除了以前活动的堆栈

答案 2 :(得分:0)

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

  

finishAndRemoveTask();

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

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

答案 3 :(得分:-1)

你应该使用意图标志。

如果你有很多活动,你会打电话给每个活动吗?

调用意图更好更容易。

希望这有帮助。