0

我已经在这部分进行了研发,但无法找到这个问题的答案

如果后台Activity是android系统的GC,如何在GC真正发生之前保存当前状态?

问候 Inder Bagga

4

2 回答 2

2

由于 Java GC 在运行之前或之后不提供任何回调机制或任何挂钩,因此不可能在 GC 之前执行某些活动。

虽然说出于监控目的,您可以尝试在固定时间间隔上捕获当前状态,但要确定此时间间隔,您可能需要验证应用程序 GC 是如何发生的:

jstat -gcutil -t -h5 <pid> 500 5

这将为您提供如下输出:

Timestamp         S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT

         3995.4   0.00   0.00   5.15   0.26  56.95      6    0.019     2    0.057    0.076

         4000.4   0.00   0.00   5.15   0.26  56.95      6    0.019     2    0.057    0.076

其中 YGCT 是以毫秒为单位的次要循环时间,这将大致了解您的应用程序 GC 统计信息,即次要循环每 19 秒发生一次,基于此,您可以在想要保存当前状态时进行调整

于 2013-04-23T09:50:19.207 回答
2

如果您的应用程序中的任何内容正在被垃圾收集,那么它将已经通过onStop()andonDestroy()方法。在它被 GCd 之前没有办法保存它

如果您想存储状态,最好在其中之一中进行 - 尽管绝对最安全的地方是onPause(),因为它们都是可终止的进程onStop()onDestroy()这意味着这些方法可能无法完全执行 - 请参阅有关Activity 生命周期的 Android 文档

于 2013-04-23T09:55:50.340 回答