我在代码中遇到了OutOfMemory异常,所以我正在查看代码。
我有一个问题,View.removeAllViews()是否会释放以前添加到父视图中的子视图使用的内存?
感谢。
答案 0 :(得分:7)
View.removeAllViews()可能会释放视图,并会安排它们进行垃圾收集(可能会在以后发生)但是你可能仍然有问题,因为XML中的@drawables或带有'getDrawable()'的代码可能仍然消耗记忆力。
我自己一直在努力解决OutOfMemory错误,并发现最大的问题不是Layout XML或View对象,而是它们加载的Drawables和Resources(或者我加载它们以附加到它们。)
关于此问题的精彩演讲可以在YouTube上通过Google IO 2011找到:
http://www.youtube.com/watch?v=_CruQY55HOk
本讲座介绍如何使用Eclipse MAT(内存分析工具)对OutOfMemory异常进行故障排除。我建议你因为你提到你正在审查代码而且开始寻找OutOfMemory错误的最佳位置是......“什么占用了我的记忆?”
答案 1 :(得分:6)
除非您的代码对ViewGroup的子视图有引用,否则所有ViewGroup的子视图都应该是“垃圾回收”。