垃圾收集活动
Garbage Collection of Activities
如果我没记错的话,Activity 对象永远不会从内存中销毁,它们一直存在直到进程被终止。所以调用 finish() 或 Android 操作系统破坏你的 Activity 并不意味着它在内存中被破坏,而只意味着它现在在 'destroyed state'(非官方名称)中。
为了演示,我确实覆盖了 activity 的 finalize 方法,然后使用另一个 activity 的按钮单击事件中的 System.gc()。我看到正在调用 activity 的 finalize 方法。如果在进程 运行 期间无法销毁 activity 个对象,那么 activity 如何被垃圾回收?
如果没有更多对 activity 的引用,那么它会被垃圾收集 - 但泄漏 activity 真的很容易 - 也就是说现在有一个非常好的工具可以找到 Activity 泄漏:https://github.com/square/leakcanary
此外,Activity 仅在调用 onDestroy() 之后才进行 GC,而不是在调用 finish() 之后直接进行 - 因此您的测量不起作用
每个 Activity
的 进程 都保存在内存中,直到需要 space 或用户强行将其从进程管理器中删除,例如 recents列表(按住 home/middle 按钮)。
这是MRU缓存模式。 Activity
在 finish()
and/or onDestroy
退出后不会剩下多少,但 JVM 需要大量设置,因此仅在以下前提下保留它是在预计将来需要之前使用的。除非你需要内存做其他事情。
如果我没记错的话,Activity 对象永远不会从内存中销毁,它们一直存在直到进程被终止。所以调用 finish() 或 Android 操作系统破坏你的 Activity 并不意味着它在内存中被破坏,而只意味着它现在在 'destroyed state'(非官方名称)中。
为了演示,我确实覆盖了 activity 的 finalize 方法,然后使用另一个 activity 的按钮单击事件中的 System.gc()。我看到正在调用 activity 的 finalize 方法。如果在进程 运行 期间无法销毁 activity 个对象,那么 activity 如何被垃圾回收?
如果没有更多对 activity 的引用,那么它会被垃圾收集 - 但泄漏 activity 真的很容易 - 也就是说现在有一个非常好的工具可以找到 Activity 泄漏:https://github.com/square/leakcanary 此外,Activity 仅在调用 onDestroy() 之后才进行 GC,而不是在调用 finish() 之后直接进行 - 因此您的测量不起作用
每个 Activity
的 进程 都保存在内存中,直到需要 space 或用户强行将其从进程管理器中删除,例如 recents列表(按住 home/middle 按钮)。
这是MRU缓存模式。 Activity
在 finish()
and/or onDestroy
退出后不会剩下多少,但 JVM 需要大量设置,因此仅在以下前提下保留它是在预计将来需要之前使用的。除非你需要内存做其他事情。