【问题标题】:How does android:noHistory="true" work?android:noHistory="true" 是如何工作的?
【发布时间】:2012-08-03 21:13:36
【问题描述】:

假设我有一个带有菜单的基本活动,当我单击菜单项 A 时,它会转到活动 A。我再次打开菜单,然后转到 B。从 BI 返回到 A,然后返回第四个暂时就这样。

所以堆栈将是 A, B, A, B, A, B, ...。 当我点击后退按钮时,它会按预期向后通过堆栈。

但是假设我不想要这个功能,所以我添加到我的清单中,android:noHistory="true"。所以当我点击后退按钮时,它会退出应用程序而不是通过堆栈。

现在错觉让它看起来,假设我在活动 A,我使用菜单并转到活动 B,堆栈将只是 B,因为我无法回到 A。

但是,当使用noHistory="true" 时,A、B、A、B、A、B 的真正堆栈是否存在?相反,是不是通过使用菜单实例化该活动的新副本而对活动的每次调用,但用户看不到它?这会导致资源问题吗?

或者当noHistory="false" 时,后退按钮只是再次调用startAcitvity(intent) 之类的东西,还是遍历每个实例化的新副本?

我关心的是资源问题,而不是降低用户安卓设备的速度。

【问题讨论】:

标签: android


【解决方案1】:

来自docs关于noHistory

值为“true”表示该活动不会留下历史痕迹。它不会保留在任务的活动堆栈中,因此用户将无法返回到它。

关于你的问题:

A、B、A、B、A、B的真正栈存在吗?

文档会表明没有。

我关心的是资源问题,而不是降低用户安卓设备的速度。

你真的不需要担心这个。当内存变低时,操作系统应该处理活动的清理。在您的活动中不当使用位图或逻辑很可能会导致性能下降。

【讨论】:

    【解决方案2】:

    android:noHistory="true" 有效:-

    假设你已经打开了“你的应用”。

    你现在在首页活动中,

    之后你去另一个(第二个)活动。从第二个活动你按下移动设备的主页按钮或打开其他一些应用程序。

    现在,如果您再次打开“您的应用程序”,它将转到应用程序的主页,而不是转到您离开应用程序的活动(即第二个活动)。

    【讨论】:

    • 不知何故可以工作。
    【解决方案3】:

    我的应用程序中的片段很少,并且在不进入我的应用程序的 Launcher Activity 的情况下按返回按钮似乎很难回到主屏幕。我在我的应用程序的启动器活动清单中使用了 android:noHistory="true" ,现在问题得到了解决。

    【讨论】:

    • 这不是正确的做法。你需要维护fragment backstack
    • 只有当用户按下返回按钮退出应用程序时,这个答案可能看起来“有效”,当用户按下主页按钮时,它不会解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多