android内存泄漏

时间:2011-10-21 10:48:40

标签: android memory-leaks

我一直在阅读Android中的内存泄漏。在我的应用程序中,我得到java.lang.OutOfMemoryError: bitmap size exceeds VM budget例外。当我用Google搜索时,我发现这是一个常见错误(this SO questionthis SO question处理问题)并且我使用了建议的解决方案。
我找到了一位官员Android documentation来处理这个问题,SO question解释了官方的例子。它在示例中说:

  

drawable引用了TextView,它本身就有一个   对活动(上下文)的引用,后者又引用了引用   几乎任何东西

我仍然不明白一件事:如果Drawable未被声明为静态,为什么它不会在活动的onDestroy()方法中被销毁? Drawable被破坏,TextView被破坏,Activity被销毁 - 没有引用也没有内存泄漏。不是它应该如何工作?

1 个答案:

答案 0 :(得分:2)

  

我仍然不明白一件事:如果Drawable未被声明为   static,为什么不在activity的onDestroy()方法中销毁它?   Drawable被破坏,TextView被破坏,Activity被破坏 -   没有引用也没有内存泄漏。不是它应该如何   工作?

是的,它应该是如何工作的,但它们可能不会立即在onDestroy()中销毁。垃圾收集器运行的确切时间无法预测。有许多事情会引发这种情况。例如,如果您的应用程序在允许的堆内存上运行不足,或者某个其他应用程序正在尝试分配更多内存......

如果您希望立即销毁您的位图,请致电Bitmap.recycle()

此视频中解释了GC如何运行以及有关android中内存管理的许多其他有用信息:

http://www.youtube.com/watch?v=_CruQY55HOk