任务杀手没有重置堆栈

Posted

技术标签:

【中文标题】任务杀手没有重置堆栈【英文标题】:Task Killer not resetting stack 【发布时间】:2010-12-07 21:13:52 【问题描述】:

我的应用程序有一个主 Activity A,它在 Activity B 上执行 StartActivity。如果有人使用 Task Killer(例如 Advanced Task Killer),应用程序将被杀死,但当他们再次运行应用程序时,我看到 Application 对象是正在构建(调用 onCreate),然后它直接进入 Activity B 而不是 Activity A。Manifest 中的 A 是 Launcher Activity。

如果我运行 A,然后是 Activity B,我还看到了这样的场景,打开通知列表并运行 Task Killer 来杀死我的应用程序,然后按返回键,它会创建 Application 对象,然后是 Activity B 对象。

关于如何防止这种行为的任何想法?活动 B 假设活动 A 已经运行。我可以解决这个问题,但在 Activity A 上设置的 Application 对象中有一个布尔值。在 Activity B onCreate 中,如果未设置该全局标志,我会执行 finish()。必须是更好的方法来处理这个问题,因为我有很多会遇到相同行为的活动。

【问题讨论】:

我也遇到过这个问题。 Task Killer 是一个讨厌的应用程序,它会从它“杀死”的应用程序下面拉出地毯。不幸的是,它并没有清理所有内容。我有多个活动,这些活动取决于另一个活动设置的应用程序状态。 @sjay 你有什么发现吗? 因此,您真的不能依赖以特定顺序发生的特定活动。我所做的是在焦点离开窗口时坚持我所能做的。 【参考方案1】:

Activity B 几乎不应该假设任何其他 Activity 已经运行。活动是独立的单元。如果 B 必须依赖于 A,那么应该对先决条件进行一些测试,如果失败,则通过 Intent 打开 ActivityA。

【讨论】:

【参考方案2】:

您可以将其保留在 SharedPreferences 中,而不是将标志保留在 Application 中 - 这样您的 Activity B 将始终知道该标志的正确值。

【讨论】:

以上是关于任务杀手没有重置堆栈的主要内容,如果未能解决你的问题,请参考以下文章

在 ACE 编辑器中重置撤消堆栈

react-navigation 3 在嵌套堆栈中重置

Reactstrap Form 重置输入值 MERN 堆栈

每次选择标签栏项目时如何重置导航堆栈?

过早重置堆栈指针?令人困惑的汇编代码

如何重置嵌套的堆栈导航导航器 react-navigation v5