【问题标题】:Need single activity in new task backstack在新任务 backstack 中需要单个活动
【发布时间】:2014-03-19 17:15:09
【问题描述】:

必须处理android任务和启动模式(标志)是一场噩梦。

需要完成这个场景:

在新任务中从后台服务启动属于 App[A] 的 Activity[1]。 当用户返回 [返回] - 完成活动 [1] 并恢复之前在前台的任何应用程序!

如果 App[A] 处于活动状态并且正在运行 - 没有问题,[beck] 关闭 Activity[1] 并恢复 App[A]。 但是,如果任何其他 App[B] 在启动 Activity[1] 时处于前台(即使使用新任务),所有 App[A] 任务和堆栈都会超过 App[B] 并破坏 [返回] 导航。 我想从 Activity[1] 导航回来后会看到 App[B]。

尝试了几种标志组合,但都没有达到所需的效果。

仅适用于 App[A] 运行时:

                Intent.AddFlags(ActivityFlags.NewTask);
                Intent.AddFlags(ActivityFlags.ReorderToFront);
                Intent.AddFlags(ActivityFlags.ExcludeFromRecents);

仅适用于 App[B] 运行时(清除 App[A] backstack):

                Intent.AddFlags(ActivityFlags.NewTask);
                Intent.AddFlags(ActivityFlags.ClearTask);
                Intent.AddFlags(ActivityFlags.ExcludeFromRecents);

如何将 Intent 配置为仅启动一个独立的 Activity[1] 并返回以恢复之前屏幕上的内容?

【问题讨论】:

    标签: android android-activity task back-stack


    【解决方案1】:

    我认为Intent.FLAG_ACTIVITY_MULTIPLE_TASK 标志会做

    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY);
    

    【讨论】:

    • 确实如此,为什么文档如此严格地反对它? Do not use this flag unless you are implementing your own top-level application launcher. Because the default system does not include graphical task management, you should not use this flag unless you provide some way for a user to return back to the tasks you have launched.什么是图形化任务管理?当然,我不会为该特定对话活动实现顶级应用程序启动器。
    • 必须深入研究源代码才能理解文档的真正含义,而我没有。我之前在不同的场景中使用过这个标志。假设您在活动中有一个按钮,按下此按钮将指示服务工作并启动电话。如果使用 ACTIVITY_MULTIPLE_TASK 标志启动电话呼叫,则在电话呼叫终止时,可见且在前台(拥有按钮的活动)将不会被带回前台。相反,拨号屏幕是可见的。
    • 谢谢你 - 我有一个稍微不同的问题,通过 URL 过滤器调用已知的其他应用程序将其带入我的应用程序的后台堆栈,而我想创建一个具有自己历史记录的新任务. FLAG_ACTIVITY_NEW_TASK 完成了这项工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多