0

我觉得这是 Gingerbread 设备上的内存问题,但是在进行了一些活动之后——无论这些活动是否被finish()编辑——屏幕变白并且活动重新加载,我不确定堆栈中的哪个活动会被显示或关闭白屏消失后。

同样,当这种情况发生时,应用程序退出后,启动器屏幕必须重新加载。

没有错误消息发布到 logcat,没有强制关闭。

我已经监控了 logcat 中的资源,但我没有查明任何可怕的事情。

我在具有 512mb RAM 的设备上看到了这一点,但由于应用程序没有获得那么多资源,很难说问题出在哪里,如果它是内存问题的话

洞察力赞赏

4

1 回答 1

1

在 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 中注册。所以,我怀疑它。

于 2013-11-12T04:35:48.540 回答