Android Intent.FLAG\u ACTIVITY\u SINGLE\u TOP和Intent.FLAG\u ACTIVITY\u CLEAR\u TOP

Android Intent.FLAG\u ACTIVITY\u SINGLE\u TOP和Intent.FLAG\u ACTIVITY\u CLEAR\u TOP,android,android-intent,Android,Android Intent,我有一个运行媒体播放器的应用程序,我想从“我的应用程序主页”活动中恢复该活动 我可以通过向startActivity调用添加以下标志来成功完成此操作: myIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); 我担心这不是一种理想的做事方式,因为我花了很长时间才找到它。这让我觉得没人经常使用它 使用这种方法有什么陷阱吗?只是为了确保我正确理解您的问题:假设您的活动堆栈类似于A->B-

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

我可以通过向startActivity调用添加以下标志来成功完成此操作:

myIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
我担心这不是一种理想的做事方式,因为我花了很长时间才找到它。这让我觉得没人经常使用它


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

只是为了确保我正确理解您的问题:假设您的活动堆栈类似于A->B->C,现在从C开始,您希望清除堆栈并返回A


如果这是您想要的,那么这些意图标志是正确的,应该按照预期工作,根据.

我知道这个问题比较老,可能你已经解决了你的问题,在那些年里你可能会去火星或回来。但为了让来这里寻求解释的人明白一点:

根据官方文件: 如果设置,则如果活动已在历史堆栈顶部运行,则不会启动该活动。

  • 假设您有
    A-B-C-D
    的backbackback,并且您已经启动了 另一个意图是用
    标记活动\u清除\u顶部开始
    活动A
    在这一点上,android将要做的只是清楚所有的问题
    活动A
    顶部的活动意味着现在您的后退将 看起来像->
    A
    (是的,就是这样,因为您已清除了所有 最重要的活动)
  • 在第二个场景中,假设你有相同的backbackback A-B-C-D 你启动了一项意图启动活动 标记\u活动\u单个\u顶部,现在您的后退将看起来像-> A-B-C-D-A(困惑?别担心,下一个例子会把你所有的问题都弄清楚 困惑)
  • 第三种情况,我们从相同的backbackback
    A-B-C-D
    开始,然后 将启动一个意图启动
    活动D
    FLAG\u ACTIVITY\u SINGLE\u TOP
    ,现在我们的backbackback看起来像->
    A-B-C-D
    (是的,由于我们的 如果同一活动当前位于顶部,则该标志禁止启动该活动 并显示在用户屏幕上

  • 最后一个场景,我们从相同的backbackback
    A-B-C-D
    开始,我们将 启动意图启动
    活动D
    ,但这次没有标志, 现在我们的backbackback看起来像->
    A-B-C-D-D

明白了吗?
FLAG\u ACTIVITY\u SINGLE\u TOP
仅在您 启动屏幕上当前显示的相同活动 并且您希望禁止启动现有活动的新实例


你去做了吗?你发现了什么陷阱吗?有意图。在主要活动上标记活动是危险的。它可能会导致时间限制。例如,在任何时候你再次按下图标来使用午餐应用程序。它将清除所有高于MainActivity的活动,甚至不调用onDestroy。很好的解释。很好的一个Shubham