使用FLAG_ACTIVITY_SINGLE_TOP有什么含义?

时间:2015-08-09 02:18:45

标签: android android-intent

有人可以解释一下FLAG_ACTIVITY_SINGLE_TOP的作用吗?文档说

  

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

但这种说法似乎在其背后隐藏着很多意义。例如,有人在线提到顶级活动可能与任务堆栈顶部的活动不同。我不知道这一切意味着什么。因此,我提出了更大的疑问:使用FLAG_ACTIVITY_SINGLE_TOP会产生什么影响?

2 个答案:

答案 0 :(得分:1)

以下是我在线阅读的答案。这不是你问的问题的完整答案,所以我真的希望别人可以为它添加更多的肉。

  

如果活动的实例已存在于顶部   当前任务,系统通过a将意图路由到该实例   调用它的onNewIntent()方法,而不是创建一个新实例   活动。活动可以多次实例化   实例可以属于不同的任务,一个任务可以有多个任务   实例(但仅当后端堆栈顶部的活动时)   不是活动的现有实例。)

     

例如,假设任务的后台堆栈由根活动A组成   活动B,C和D在顶部(堆栈是A-B-C-D; D打开   最佳)。意图到达D类活动。如果D有   默认的“标准”启动模式,该类的新实例是   启动后,堆栈变为A-B-C-D-D。但是,如果是D的发射模式   是“singleTop”,D的现有实例是传递意图   通过onNewIntent(),因为它位于堆栈的顶部:   堆栈仍然是A-B-C-D。但是,如果意图到达某个活动   对于类型B,然后将新的B实例添加到堆栈中,即使它是   启动模式是“singleTop”。

答案 1 :(得分:0)

这意味着如果活动已经启动并且您再次调用它,您将不会用新的替换它(并且您不会创建另一个(有时会发生并且当您回击并且您看到相同的活动时很明显),相反,你会拉那个。

所以说你有3个活动:A - > b - > C。你在C,你通过A然后B来到它。如果你打电话给A,从C和SINGLE_TOP过滤器你的堆栈将看起来像A,C,B - 如果你开始按下后退按钮,你会去到C,然后B.我可能是错的,但多数民众赞成我相信它是。您也可以传入CLEAR过滤器来擦除后面的堆栈,然后在A处开始技术上没有堆栈,你可以直接回到主页。 - 如果我不准确,请更正。