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

Cra*_*ell 25 flags android logout android-intent android-activity

在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();
Run Code Online (Sandbox Code Playgroud)

finishAffinity()方法适用于> = API 16.

Intent标志的方法是适合于> = API 11.

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

bri*_*ndy 14

在功能上,没有区别,但在GenyMotion上测试这一点似乎有轻微的视觉差异.请参阅网络广播:https://drive.google.com/file/d/0B8Y77sY7Y2CGRS02c3UyNjd2MGs/view?usp=sharing

您需要在一系列设备上尝试这一点,以了解它的一致性.

主观上,我会说,finishAffinity()因为它更明确.但是,如果您必须支持<SDK 16,那么您实际上没有选择权.

  • @brindy 太糟糕了,视频不再可用。 (3认同)