Android FLAG_ACTIVITY_NEW_TASK被忽略

时间:2012-04-24 16:19:37

标签: android android-activity task

是否存在忽略FLAG_ACTIVITY_NEW_TASK的情况?从服务我开始一个具有设置该标志的意图的活动,当主要活动在后台时,我期望在新任务中看到新活动,所以我希望当我再次在后台看到该应用程序时关闭新活动。 它没有发生,主要活动显示出来。

仅仅是为了测试我尝试将主要活动设置为singleInstance,在这种情况下它可以工作。我不想将主要活动设置为singleInstance。

你知道什么时候会发生这种情况吗?

我应该补充一点,我在所有设备上都看到了这种行为,所以看起来它应该是应该工作的方式,而不是特定于设备的问题。

1 个答案:

答案 0 :(得分:6)

我修复了它,为第二个活动设置了不同的亲和力。问题是有关FLAG_ACTIVITY_NEW_TASK标志的文档说明:

  

如果设置,此活动将成为此历史堆栈上新任务的开始

但这是误导性的,因为听起来框架总是会创建一个新任务,当从服务启动活动时,情况并非如此。

这是有关活动的taskaffinity属性的文档:

  

机器人:taskAffinity   活动具有亲和力的任务。具有相同亲和力的活动在概念上属于同一任务(从用户的角度来看属于相同的“应用程序”)。任务的亲和力由其根活动的亲和力决定。   亲和性决定了两件事 - 活动重新定位的任务(请参阅allowTaskReparenting属性)以及在使用FLAG_ACTIVITY_NEW_TASK标志启动时将容纳活动的任务。

所以,如果从活动中调用startActivity,则会启动新任务,但如果从服务启动它,则框架会将活动附加到具有相同关联的任务(如果存在顶级活动)这不是singleInstance