android - Activity.finishAffinity() 与 Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK

标签 android android-intent android-activity logout flags

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

如果您的目标 API 级别高于 16,那么两者相比有什么优势吗?

1) 完成亲和力

从 Activity 调用 finishAffinity()Activity.finishAffinity

2) Intent 标志

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 堆栈,这两种方法似乎也同样有效。我的问题是,人们经历过这两种方法是否存在问题,因此,有什么理由选择其中一种吗?

最佳答案

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

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

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

关于android - Activity.finishAffinity() 与 Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33497151/

相关文章:

android - 从 Activity 启动服务

android - 在两个 Activity 之间来回走动的最佳方式?

android - 如何从 ListView 中获取值(value)并将 JSON 数据传递给另一个 Activity

android - RxJava运算符切换方法

java - Class.forName() 一直显示错误 : java. lang.NullPointerException

android - 多个 Activity 竞争一个 Intent

java - 如何从 List<> 中删除一个项目?

android - 如何从 Sherlock 操作栏菜单项中删除蓝光?

android - Android 3.1+ 中的 BroadcastReceiver 问题

Android操作栏标题颜色不变