【问题标题】:Android: does FLAG_ACTIVITY_NEW_TASK has effect within the same process?Android:FLAG_ACTIVITY_NEW_TASK 在同一个进程中是否有效?
【发布时间】:2011-07-11 07:21:05
【问题描述】:

假设一个应用程序已经有一堆活动,然后一个新活动从应用程序上下文中启动,带有 FLAG_ACTIVITY_NEW_TASK。这发生在同一个进程中,即在应用程序内部,如下所示:

AppContext -> A(FLAG_ACTIVITY_NEW_TASK) -> B -> C; AppContext -> D(FLAG_ACTIVITY_NEW_TASK)

根据文档,我们现在有 2 个任务:

Task 1: A, B, C; Task 2: D

从文档中可以看出,理论上用户可以独立地切换到活动 C 或活动 D,因为它们属于不同的任务。然而,在实践中,我无法切换到活动 C - 它总是切换到 D。

我的问题是: 是不是如果在同一个进程中启动FLAG_ACTIVITY_NEW_TASK,任务不是独立的,用户只能在最顶层的任务中切换到最顶层的activity?

如果答案是“否”,那么用户切换到任务 1 的方式是什么?


更新

答案是:
这些任务是独立的,用户可以在他们的活动之间独立切换,有效地让你的应用程序的两个活动在堆栈的顶部。在提出原始问题三年后,我才找到了用例。

我们的应用程序将自己注册为 URL 方案的处理程序(例如 market://xxx.yyy/zzz)。现在让我们想象一下,用户使用启动器启动应用程序,进入某事的中间(活动A, B, C),然后离开。然后在浏览器中,用户点击一个 URL 以启动我们的其他活动(活动D)。这导致同时有两个任务:活动A, B, C(顶部有C)和活动D用户可以通过任务历史在这两个活动之间切换。

有趣的是,Activity C 在任务历史记录中显示为应用程序自己的图标,但 Activity D 显示在浏览器图标中。无论如何,两者都可以切换到。

另外,A-B-CD 两个任务在同一个进程中运行。这意味着所有单例对象和静态数据在它们之间共享。因此,如果不小心,它们可能会破坏彼此的状态。

【问题讨论】:

    标签: android android-activity stack task


    【解决方案1】:

    我问了这个问题已经有一段时间了,我发现这个链接非常有用。它非常清楚地描述了所有标志和组合。

    http://blog.akquinet.de/2010/04/15/android-activites-and-tasks-series-intent-flags/

    【讨论】:

    • Kumar,软件开发的艺术就像任何艺术一样,不是复制别人的代码,而是从中获得灵感。
    【解决方案2】:

    我认为没有办法切换向用户公开的任务(相对于应用程序)。您可以通过启动相应的 Activity 来切换到代码中的其他任务。

    编辑 - notifications 可能是让用户切换没有启动器的任务的最佳方式。

    【讨论】:

      【解决方案3】:

      我创建了一个参考项目来解决这个确切的用例:

      https://github.com/theelfismike/android-parallel-paths

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-29
        • 1970-01-01
        • 1970-01-01
        • 2011-02-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多