【问题标题】:Launching an Activity from the background without attaching it to the task stack of existing activities of the same app从后台启动 Activity 而不将其附加到同一应用的现有 Activity 的任务堆栈
【发布时间】:2014-11-15 17:55:06
【问题描述】:

我正在后台从服务启动一个活动 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,但是在 cmets 中提到除非实现应用程序启动器,否则不要使用它

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

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

我真的很高兴对此有很好的解决方案, 提前致谢

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-27
      • 1970-01-01
      • 2021-02-05
      • 1970-01-01
      相关资源
      最近更新 更多