Android Intent.FLAG_ACTIVITY_SINGLE_TOP和Intent.FLAG_ACTIVITY_CLEAR_TOP

时间:2010-07-10 05:17:25

标签: android android-intent

我有一个应用程序,我运行了一个媒体播放器,我想从我的应用程序主页活动恢复活动。

我可以通过在startActivity Call中添加以下标志来成功完成此操作:

myIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);

我担心这不是理想的做事方式,因为我花了很长时间才找到它。这让我觉得没有人会非常使用它。

使用这种方法有什么缺陷吗?

2 个答案:

答案 0 :(得分:13)

只是为了确保我正确理解你的问题:说你的活动堆栈就像A - > B - > C,现在从C你要清除堆栈并返回A。

如果这是你想要的,那么那些意图标志是正确的,并且按照Android-developer docs按预期工作。

答案 1 :(得分:7)

我知道这个问题年龄比较大,也许您已经解决了问题,并可能在那几年被送往火星并回去了,但是只是为了使来这里的人们清楚并寻求解释:

根据官方文档:

  

如果已设置,则该活动如果已在历史记录堆栈的顶部运行,则不会启动。

  • 假设您有A-B-C-D的BackStack,并且您已经启动了 另一个意图是从Activity A开始,FLAG_ACTIVITY_CLEAR_TOP 此时,Android将要做的就是清除所有 Activity A顶部的活动意味着现在您的BackStack将 看起来像-> A(是的,因为您已经清除了所有 活动之上)。
  • 在第二种情况下,假设您具有相同的BackStack A-B-C-D 然后您启动了一个意图启动活动A FLAG_ACTIVITY_SINGLE_TOP,现在您的BackStack看起来像-> A-B-C-D-A(感到困惑?不要担心下一个示例将清除您的所有内容 困惑)
  • 第三种情况,我们从相同的BackStack A-B-C-D开始,然后 将启动一个以Activity D为起点的Intent FLAG_ACTIVITY_SINGLE_TOP,现在我们的BackStack看起来像-> A-B-C-D(是,BackStack保持相同的顺序,因为我们的 FLAG禁止启动“相同活动”(如果它是“当前在前”) 并显示在用户屏幕上。

  • 最后一种情况,我们从相同的BackStack A-B-C-D开始,我们将 启动一个Activity D开头的Intent,但是这次没有FLAGS, 现在我们的BackStack看起来就像-> A-B-C-D-D

  

知道了吗? FLAG_ACTIVITY_SINGLE_TOP仅在您   开始当前在屏幕上显示的同一活动   并且您要禁止启动现有活动的新实例。