3

是否存在忽略 FLAG_ACTIVITY_NEW_TASK 的情况?从服务中,我启动一个带有设置该标志的意图的活动,当主要活动在后台时,我希望在新任务中看到新活动,因此我希望在后台再次看到应用程序关闭新活动。它没有发生,并且显示了主要活动。

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

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

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

4

1 回答 1

6

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

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

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

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

android:taskAffinity Activity 具有亲和力的任务。具有相同亲和力的活动在概念上属于同一个任务(从用户的角度来看,属于同一个“应用程序”)。任务的亲和性由其根活动的亲和性决定。亲和性决定了两件事——Activity 被重新设置为父级的任务(请参阅allowTaskReparenting 属性)和使用 FLAG_ACTIVITY_NEW_TASK 标志启动时将容纳 Activity 的任务。

因此,如果您从 Activity 调用 startActivity,则会启动一个新任务,但如果您从服务启动它,则框架会将 Activity 附加到具有相同亲和力的任务(如果存在与不存在的顶级活动)单个实例

于 2012-04-25T09:32:37.850 回答