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
在 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