【问题标题】:Activity.finishAffinity() vs Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASKActivity.finishAffinity() 与 Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK
【发布时间】:2016-02-03 11:44:38
【问题描述】:

在 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() 方法适用于 >= API 16。

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

需要明确的是,为了清除当前的Activity 堆栈,这两种方法似乎也同样有效。我的问题是,人们经历过这两种方法是否存在问题,因此,有什么理由选择其中一种吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    主观上,我会说使用finishAffinity(),因为它更明确。但是,如果你必须支持

    【讨论】:

    • 您提到的延迟或闪烁最初是让我质疑 finishAffinity() 的原因。 IIRC,尤其是某些三星设备在使用 finishAffinity() 时会出现非常明显的闪烁,但我不再需要测试这些设备。
    • 在这种情况下,根据视频闪烁的是意图版本。
    • 实际上,我不确定我是否会称之为闪烁(基于视频)。不过,视觉上发生的事情肯定是不同的。 finishAffinity 看起来像出现在顶部,意图版本看起来已经“完成”,显示堆栈顶部的另一个。
    • 您可以选择使用 ActivityCompat。
    • @brindy 太糟糕了,视频不再可用。
    【解决方案2】:

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

    finishAndRemoveTask();

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

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

    【讨论】:

      【解决方案3】:

      试试这个

      Intent.FLAG_ACTIVITY_CLEAR_TOP
      

      它清除以前的活动堆栈

      【讨论】:

        【解决方案4】:

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

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

        只调用一个 Intent 会更好、更容易。

        希望这会有所帮助。

        【讨论】:

        • 我的问题中列出的这两种方法的目的是完成当前堆栈中的所有活动,而不必分别对每个活动调用 finish()。需要明确的是,据我所知,这两种方法都可以做到这一点。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        相关资源
        最近更新 更多