我是Android编程的新手。我在我的布局中使用了很多图像(还有声音)。最近我经常有OutOfMemory异常,现在我完全卡住了。我怎样才能防止它呢?我是否应该将对未使用的布局项的引用设为空,并让GC工作?或者我应该回收图像资源?
关于我的应用程序:这将是一个游戏,你可以在下面看到一些关于它的建议屏幕截图。基本上有一个活动,我想把大约9-10膨胀布局在同一个活动。我想把这些布局放在同一个活动中的主要原因是,它们在逻辑上是一致的,我想在它们之间快速切换。
然而,这些布局视图消耗了大量的内存资源(例如,由于图片和声音),并且内存中充满了它们。不幸的是,由于某些原因,GC并没有提供帮助,尽管我尝试将布局视图的引用设为空。

发布于 2013-08-06 20:50:20
我们会使用更多的信息来真正帮助你。OutOfMemoryException很特别,你的程序是做什么的?但是看看这些:
-You可能想要查看某个无限循环/条件
-Audio和可视资源可以相当大,请务必使用压缩格式。
-启动程序时不要加载整个资源
-You可以在GC之前使用函数释放内存,但同样,这是不常见的,具体取决于您的应用程序
请提供有关您的应用程序的更多信息
发布于 2013-08-06 20:58:32
如果我们不知道您的应用程序的设计,这是一个非常广泛的问题。最有可能的原因是,您的应用程序存在内存泄漏,或者它只是在设计时需要大量内存。
如果您确实有内存泄漏,您应该尽一切努力找到它们并将其关闭。这通常是由完成的,以确保您的引用不会泄漏到不真正需要它们的地方。使所有内容都尽可能严格地限定作用域。显式地将引用设置为null很少是一个好主意,因为它通常适用于两种情况:一种情况是您正在讨论自动(局部)变量,因此将它们设置为null对您的应用程序没有任何好处(当它们超出作用域时,它们将作为引用被自动忽略)。另一种情况是如果这些引用是对象中的字段,在这种情况下,将它们设置为null可能会使对象处于无效状态(取决于大小写),因此将状态有效性检查委托给代码中使用这些对象的每个位置,从而使整个代码变得混乱。现在,需要明确的是:我并不是说将引用设置为null不会有帮助,我是说,如果你必须这样做,你可能会保留不应该保留的引用,所以你有某种设计缺陷,而不是缺少null赋值。
另一方面,如果您的应用程序实际上需要大量内存(假设它没有内存泄漏),那么您应该重新设计一些功能来消耗更多的内存。例如,在内存中只加载真正需要的东西。考虑使用更紧凑的格式的。如果您正在缓存内容,但又不希望缓存机制让它们保持活动状态,那么可以考虑使用弱引用。
https://stackoverflow.com/questions/18080456
复制相似问题