如何修复 Java 中的 OutOfMemory 错误?
Posted
技术标签:
【中文标题】如何修复 Java 中的 OutOfMemory 错误?【英文标题】:How can I fix an OutOfMemory error in java? 【发布时间】:2016-11-14 01:36:57 【问题描述】:我有 8 个不同的活动,它们在随机单击按钮时相互打开。单击打开新活动的按钮大约 15 次后,它会崩溃。我需要关闭活动还是有其他解决方案?
【问题讨论】:
也许先解决他们重复打开对方的问题? 我希望它这样做。我想要一个连续的循环。我正在寻找类似于随机播放和重复所有音乐播放器的东西,除了活动。还是我应该在一个活动中完成所有这些工作? 您应该希望通过更少的活动来解决这个问题...... 【参考方案1】:正如 Harsh Pandey 所说,您可能希望研究使用片段而不是活动。另一种可能的方法是在您开始下一个活动后立即致电finish();
。这将关闭上一个活动。但是,如果您打算使用后退按钮或其他东西返回此活动,则它不会存在。
【讨论】:
【参考方案2】:当您创建新的活动并关闭它们时,GC 会在需要时自动清理旧活动使用的内存。您遇到内存不足错误,因为,
您的活动阻止了一个仍然存在的引用。这将阻止 GC 清理旧的活动。例如,
查找未正确清除的动画。解决这个问题的最好方法是找到内存泄漏。
https://developer.android.com/studio/profile/investigate-ram.html
建议:
正如 3kings 所说,尝试在一项活动中完成。即使用片段!!
【讨论】:
【参考方案3】:您可以通过在清单中添加以下内容来请求更多堆大小:
android:largeHeap="true"
但是,根据您的评论,我猜这种情况非常适合片段,而不是活动。您可以在一个 Activity 中使用多个可重复使用的片段来完成所有这些工作。
【讨论】:
以上是关于如何修复 Java 中的 OutOfMemory 错误?的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 ZipFileSet 提取大 jar 时出现 OutOfMemory 错误