【发布时间】:2015-01-26 12:20:25
【问题描述】:
与此相关的 SO 有很多问题,但我找不到这样直接的问题。
我的应用有一个主活动 M 和一个子活动 S。
M launchMode 是 singleTask,因为我只想运行一个实例,并且我希望 S 与 M 存在于同一任务中。
S launchMode 是 standard,因为它可以有很多实例。
在 S 中,有一个向上按钮,必须始终将用户带到 M。
有两种类型的任务堆栈(S在顶部):
- MSSSS...S
如果用户在 S 中按下 Up,那么堆栈应该变成:
M(其中 M 应该处于用户离开它的相同状态)
- SSSS...S
如果用户在 S 中按下 Up,那么堆栈应该变成:
M(一个新实例)
--
那么如何为向上按钮构造Intent...
在第一种情况下,FLAG_ACTIVITY_CLEAR_TOP 应该可以解决问题,但如果我们将此应用于第二种情况,则用户将被转储回主页。
在第二种情况下,FLAG_ACTIVITY_CLEAR_TASK 可以解决问题,但如果我们将其应用于第一种情况,我们会发现 M 已完成并重新启动。
人们也可能想尝试FLAG_ACTIVITY_NEW_TASK,但我们发现从 M 中点击 Back 会将用户带到他/她点击 Up 的屏幕。
旁注:当 M 为 singleTask 并且所有活动都具有相同的(默认)任务关联时,这怎么可能?
那么在这种情况下如何正确构造Up Intent呢?
【问题讨论】:
-
你有很多
S但没有M是什么情况?为什么M完成了?这让一切变得更加困难。您应该检查您的应用程序架构,看看您是否可以让M在任务堆栈中保持活动状态。然后,您可能可以摆脱所有活动的标准启动模式,只需使用标志来确保在根目录下有一个M实例 -
简单地说 S 也是一个潜在的切入点 - 例如从一个小部件。在那种情况下,使用 M 作为转发活动感觉就像是一个重大黑客攻击。
标签: android android-intent android-activity android-task