1

我正在创建一个 android 应用程序并且由于位图图像而遇到 OOM 问题。我当然需要在内存方面使图像更小,但是我想练习正确的内存消耗并正确加载它们。

目前我的布局包含对 res/drawable-hdpi 文件夹中图像的引用作为它们的背景。我查看了另一个堆栈溢出问题:outOfMemoryError with background drawables,问这个问题的人和我有同样的问题。我看到答案表明我应该在 java 中引用位图,然后在 onResume 期间回收 onPause 并重新设置它们。现在这是否意味着我不应该在 xml 中设置背景,然后在 java oncreate 中这样做,然后在 onResume 期间回收和设置它们?另外,我正在研究弱引用,但发现自己对此感到困惑......谁能给我一个关于弱引用的好解释?

我感谢所有的答案,

干杯,

杰克

4

1 回答 1

0

在程序执行期间,如果没有绑定软引用或强引用,弱引用将首先被垃圾回收。因此,如果内存相当低,或者当垃圾收集器认为合适时,弱引用就会被垃圾收集,这就是为什么我在我的代码中包含 else 语句来显示这种情况的发生。
资料来源:http ://www.javacodegeeks.com/2012/01/understanding-java-weak-references.html

当你做一个弱引用时,你告诉 GC 这个人占用的内存需要先被释放。你通过调用释放内存System.gc()

同样,关于这个还有另一个答案:
Java:强/软/弱/幻影参考之间的区别

维基百科有一个更简单的例子:
http ://en.wikipedia.org/wiki/Weak_reference#Java

在您的情况下,假设您正在加载一个相当大的高清图像作为背景。然后你需要做一些更多的数据加载到内存中等等导致OOM。您可以做的是释放此 GD 映像所持有的内存onStop(),然后将onResume()其加载回来。
但是,我认为您还应该查看您的应用程序中可以被弱引用的其他内容。

于 2013-08-21T03:58:16.283 回答