在 Gingerbread 上出现这种行为的另一个可能原因可能是定义在 中的常量com.android.server.am.ActivityStack
:
// 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;
...屏幕变白并重新加载活动
在活动从后台状态转换到前台状态期间,将其不活动的持续时间与此常数进行比较。在某些情况下,活动会重新加载(更多内容见下文)。
我不确定在白屏消失后堆栈中的哪个活动会被显示或关闭
为活动设置的标志用于确定将显示堆栈中的哪个活动。确定这一点的方法是ActivityStack#resetTaskIfNeededLocked(ActivityRecord, ActivityRecord)
。你可以在这里查看:链接。
您可能会发现通过ActivityStack
课程并了解如何处理活动启动/恢复以及在需要时如何重新排列活动堆栈很有趣。
请注意,上面提到的常量zero
在 4.0.1_r1 及更高版本中保持值,并没有投入使用。
即使您注意到在 30 分钟内启动和恢复的活动的这种行为,标志仍可能负责重新洗牌堆栈。
没有错误消息发布到 logcat,没有强制关闭。
由于内存不足而终止进程在 Logcat 中注册。所以,我怀疑它。