我已经在这部分进行了研发,但无法找到这个问题的答案
如果后台Activity是android系统的GC,如何在GC真正发生之前保存当前状态?
问候 Inder Bagga
由于 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 秒发生一次,基于此,您可以在想要保存当前状态时进行调整
如果您的应用程序中的任何内容正在被垃圾收集,那么它将已经通过onStop()
andonDestroy()
方法。在它被 GCd 之前没有办法保存它
如果您想存储状态,最好在其中之一中进行 - 尽管绝对最安全的地方是onPause()
,因为它们都是可终止的进程onStop()
,onDestroy()
这意味着这些方法可能无法完全执行 - 请参阅有关Activity 生命周期的 Android 文档