我一直在阅读Android中的内存泄漏。在我的应用程序中,我得到java.lang.OutOfMemoryError: bitmap size exceeds VM budget
例外。当我用Google搜索时,我发现这是一个常见错误(this SO question和this SO question处理问题)并且我使用了建议的解决方案。
我找到了一位官员Android documentation来处理这个问题,SO question解释了官方的例子。它在示例中说:
drawable引用了TextView,它本身就有一个 对活动(上下文)的引用,后者又引用了引用 几乎任何东西
我仍然不明白一件事:如果Drawable未被声明为静态,为什么它不会在活动的onDestroy()
方法中被销毁? Drawable被破坏,TextView被破坏,Activity被销毁 - 没有引用也没有内存泄漏。不是它应该如何工作?
答案 0 :(得分:2)
我仍然不明白一件事:如果Drawable未被声明为 static,为什么不在activity的onDestroy()方法中销毁它? Drawable被破坏,TextView被破坏,Activity被破坏 - 没有引用也没有内存泄漏。不是它应该如何 工作?
是的,它应该是如何工作的,但它们可能不会立即在onDestroy()
中销毁。垃圾收集器运行的确切时间无法预测。有许多事情会引发这种情况。例如,如果您的应用程序在允许的堆内存上运行不足,或者某个其他应用程序正在尝试分配更多内存......
如果您希望立即销毁您的位图,请致电Bitmap.recycle()
。
此视频中解释了GC如何运行以及有关android中内存管理的许多其他有用信息: