关于垃圾收集调用时保存当前状态

时间:2013-04-23 09:43:06

标签: java android

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

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

此致 Inder bagga

2 个答案:

答案 0 :(得分: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 stat表示每隔19秒发生一次小循环,根据此情况,您可能需要调整以保存当前状态

答案 1 :(得分:2)

如果您的应用中的任何内容被垃圾收集,它将已经通过onStop()onDestroy()方法。在GCd

之前,无法将 保存为

如果您想存储状态,最好在其中一个状态下执行 - 尽管绝对最安全的地方是onPause(),因为onStop()onDestroy()都是可以使用的进程,意味着方法可能无法完全执行 - 请参阅Activity lifecycles

上的Android文档