垃圾收集载入画面

Garbage collection loading screen

我的 android 申请中有两项活动。当我从第一个 activity 切换到第二个 activity 时,gc 开始并使第二个 activity 滞后直到完成。我决定制作一个闪屏(加载屏幕),在 gc 完成之前不会关闭,但我不知道如何以编程方式获取 gc 状态。有class吗?请让我知道我怎样才能得到这个场景!

首先,在 Android 中,垃圾收集由 ART - Android 运行时或 DVM - Dalvik 虚拟机(在旧设备上)组织。由于 ART/Dalvik 本质上是 JVM 的专用版本,它们具有与 GC 类似的方法,因此它仅由系统而不是由用户管理。

Hence, you don't get to control the garbage collection in Android.

的确,您可以调用 System.gc(),但既不保证也不推荐这样做。您应该完全忘记垃圾收集过程并将其交给系统。

虽然你无法控制它,但你仍然有责任管理内存并尽可能防止过度使用内存。一些提示,您应该考虑:

  • 处理完大对象后立即释放它们(删除指向它们的硬引用);
  • 根据您的需要利用多线程,线程将以并行方式更快地工作(尤其是在多核处理器上);
  • 优化您的算法,如果操作不当,即使是基本的列表迭代也可能会减慢进程并泄漏内存

我认为@Serj 的回答总结得很好。如果您保留旧 activity 的实例,并且因此它仍然被引用,直到设置启动画面,您可能会找到一种触发 GC 的解决方法。然后你删除最后的引用并希望 GC 被调用——但它可能会在稍后被调用。如何查看 GC 的状态是一个很好的问题,也许您可​​以读出内存并查看其是否已满? 最好的建议是仅在需要对象的范围内重构和使用对象。

谢谢大家的解答。经过一些工作后,我发现了代码中的问题。 我正在使用新实例在 while 循环中执行此异步 class。所以它保持内存增加,两小时后它开始挂起,或者当 activity 切换 gc 执行时。