很好的问题,经过一番深入研究后,答案确实令我惊讶!
快速浏览一下 Android 源代码似乎就能找到答案。让我们首先回顾一下 Android 2.2:ActivityManagerService.java https://android.googlesource.com/platform/frameworks/base/+/refs/heads/froyo-release/services/java/com/android/server/am/ActivityManagerService.java。注意第 186 行左右定义了一个常量,称为ACTIVITY_INACTIVE_RESET_TIME
恰好设置为 30 分钟。
// How long until we reset a task when the user returns to it. Currently
// 30 minutes.
static final long ACTIVITY_INACTIVE_RESET_TIME = 1000*60*30;
再往前看一点resetTaskIfNeededLocked()
方法在第 7021 行附近,您将看到检查此值以确定任务是否应在启动之前重置。
快进到 Android 4.3 源代码,代码已移至ActivityStack.java https://android.googlesource.com/platform/frameworks/base/+/jb-mr2.0.0-release/services/java/com/android/server/am/ActivityStack.java这是从 ActivityManagerService 调用的,但基本结构是相同的。这次,常量是在第 125 行左右定义的:
// How long until we reset a task when the user returns to it. Currently
// disabled.
static final long ACTIVITY_INACTIVE_RESET_TIME = 0;
相同resetTaskIfNeededLocked()
方法在第 1973 行左右找到,您可以看到现在它在应用相同的超时检查来清除任务状态之前检查该值是否大于零。但请注意,此方法仍然会检查FLAG_ALWAYS_RETAIN_TASK_STATE
,因此该标志仍然可以用于保护状态清除,但似乎在禁用外部检查的情况下,该代码将永远不会被执行。
总体而言,这似乎是非常令人信服的证据,表明该功能已在 Android 更高版本的 AOSP 中被有效禁用。我没有看到每个设备重新启用此值的外部方法(通过系统属性等),除非制造商要使用此处添加的值重建代码......但这并不常见。大多数 ODM 坚持使用 XML 中的配置属性或他们可以通过覆盖层控制的系统属性。
因此,虽然从技术上讲该功能尚未“删除”,但在我看来,文档在延迟后自动触发方面不再正确。