java - 在 Activity-Back-Stack 上回收 Activity View

标签 java android memory-leaks android-view

我有一个图像非常密集的应用程序,我发现我在加载多个 Activity 时遇到了很多 OutOfMemory 问题。

Activity 都是位图的 GridView 或 ListView ,单击图像会将您带到包含另一组图像的另一个 Activity (有点像相册的相册的相册)。前 3 个 Activity 运行良好,但当继续向下导航时,我开始遇到一些严重的 OutOfMemory 错误。

在使用 DDMS 进行堆栈转储后,之前 Activity 的 GridView 和 Listview 似乎占用了所有内存。这是意料之中的,因为它们自己显示了很多位图,但我不确定 VM 如何释放堆栈中的 Activity ,以及即使您没有调用“finish()”它们是否会这样做他们。

当 Activity 进入后台时,Do Activity 会回收它们的 View ,然后在您导航回 Activity 时恢复它们,或者正在清除我的 gridviews 和 listviews 中的 ImageView ,这是我需要在 onPause() 和 activity 上手动处理的事情onResume() 何时离开生命周期函数中的 Activity ?

最佳答案

请在 OOME 上查看我的回答

总是在使用位图之后调用bitmap.recycle(),因为GC无法清除位图占用的内存。

上面的链接有一个通用的解决方案,请通过它。

关于java - 在 Activity-Back-Stack 上回收 Activity View,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12456319/

相关文章:

Java File.listFiles() 无法从绝对路径检索名称

Java Excel分组数据

android - 以编程方式创建按钮或在 xml 中创建按钮之间是否存在性能差异?

android - CodenameOne - android.buildToolsVersion=27 的 Android 权限错误

Android + Bluetooth (Bluecove) - 需要关闭 OutputStream 才能真正写入数据

python - 为什么删除方法不释放 Tkinter 中小部件的内存?

java - 如何在 Java/Android 中查找内存泄漏

c++ - 无法在控制台上看到内存泄漏

java - RuntimeException:无法实例化 Activity 组件信息

java - Hibernate saveOrUpdate 方法创建新条目/行而不是更新现有条目/行