从后台启动活动而不将其附加到同一应用程序的现有活动的任务堆栈

时间:2014-09-21 18:51:15

标签: android android-intent android-activity background launch

我正在后台从服务启动活动A,这很有效,并且活动已创建并可使用以下代码:

        Intent intent = new Intent(context, getActivityClass());
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);

如果已在任务列表中包含活动A的应用程序的运行活动B,则会出现意外行为。 如果用户使用后退按钮,当我的活动A从后台启动时,用户可能会回到前面的活动, 然而它导航回到活动B而不是真的令人困惑。

在阅读文档后,我尝试允许任务重新显示,但这仍然无法解决,但仍然显示上述问题。

    <activity
        android:name="net.x.y.z.PickContactActivity"
        android:allowTaskReparenting="true"
        android:theme="@android:style/Theme.Translucent.NoTitleBar">
    </activity>     

根据这个问题Need single activity in new task backstack应该使用Intent.FLAG_ACTIVITY_MULTIPLE_TASK,但是在评论中提到不要使用它,除非实现app-launcher

  

除非您要实现自己的顶级应用程序启动器,否则请勿使用此标志。由于默认系统不包含图形任务管理,因此除非您为用户提供某种方式返回已启动的任务,否则不应使用此标志。

然后我需要做些什么才能解决这个问题?简而言之:选择联系人活动应该简单地作为一个真正的新任务处理,而不与任何其他正在运行的应用程序实例相关联,就像我在Windows PC上打开记事本两次一样

我真的很高兴能有这个好的解决方案, 提前谢谢

1 个答案:

答案 0 :(得分:2)

BY DEFAULT;同一个应用程序中的两个活动将出现在同一个任务中;要更改此行为,请在Manifest xml中为活动A和B添加:android:taskAffinity =“”;并将android:allowTaskReparenting更改为“假“