0

我是 Android 编程新手。我在布局中使用了很多图像(以及声音)。最近我通常有OutOfMemory Exception,现在我完全卡住了。我该如何预防?我应该对未使用的布局项的引用清空并让 GC 工作吗?还是我应该回收图像资源?

关于我的应用程序:这将是一个游戏,你可以在下面看到一些关于它的建议截图。基本上有一个活动,我想在同一个活动中放置大约 9-10 个膨胀布局。我想将这些布局放入同一个 Activity 的主要原因是,它们在逻辑上是连贯的,我想在它们之间快速切换。

然而,这些布局视图会消耗大量内存资源(例如,由于图片和声音),并且内存已被它们填满。不幸的是,出于某种原因,GC 没有帮助,尽管我试图使布局视图的引用为空。

在此处输入图像描述

4

2 回答 2

1

我们将使用更多信息来真正帮助您。OutOfMemoryException 很不寻常,你的程序是什么?但是看看这些:

- 你可能想看看一些无限循环/条件

- 视听资源可能比较大,一定要使用压缩格式。

- 启动程序时不要加载全部资源

- 您可以在 GC 之前使用函数来释放内存,但同样,这并不常见,具体取决于您的应用程序

请提供有关您的申请的更多信息

于 2013-08-06T12:50:20.370 回答
1

如果我们不知道您的应用程序的设计,这是一个非常广泛的问题。最有可能的是,您的应用程序存在内存泄漏,或者它只是设计时需要大量内存

如果您确实有内存泄漏,您应该尽一切努力找到它们并关闭它们。这通常是通过确保您的引用不会逃到真正不需要它们的地方来完成的。使所有内容尽可能严格. 显式设置对 null 的引用很少是一个好主意,因为它通常适用于两种情况:一种情况是如果您正在谈论自动(局部)变量,那么将它们设置为 null 根本不会使您的应用程序受益(它们'当它们超出范围时将被自动忽略为引用)。另一种情况是,如果这些引用是对象中的字段,在这种情况下将它们设置为 null 可能会使您的对象处于无效状态(取决于具体情况),因此将状态有效性检查委托给您使用这些对象的代码中的每个位置,让你的整个代码一团糟。现在,要明确一点:我并不是说设置对 null 的引用无济于事,我的意思是,如果您必须这样做,您可能会保留不应该保留的引用,因此您存在某种设计缺陷,而不是缺少空分配。

另一方面,如果您的应用程序实际上需要大量内存(假设它没有内存泄漏),那么您应该重新设计一些功能以消耗更保守的数量。例如,仅将真正需要的东西加载到内存中。考虑让它们采用更紧凑的格式。如果您正在缓存内容但不希望缓存机制使它们保持活动状态,请考虑使用弱引用

于 2013-08-06T12:58:32.030 回答