4

我正在为 android 创建这个游戏,我有一些关于内存使用的问题。当我们在无知中进行编码时,我们的应用程序使用了大约 40mb 内存,但这导致测试手机崩溃(Xperia Arc(某事,某事))内存不足。然后我们用内存对其进行了更智能的编码,达到了大约 20 mb。我们用谷歌搜索了很多,我们看到人们发布大多数手机限制为 16 mb 和其他 32 mb。但是,我们还与其他应用程序(如愤怒的小鸟)进行了比较,它们使用了大约 129 内存(在我们的应用程序崩溃超过 32 mb 的 Xperia arc 上运行良好)。

那么我的问题是:我们能否以某种方式使用超过 16 / 32 mb 的内存,或者使用更多的应用程序如何做?

有人说您可以使用其他进程来处理内存并为该进程再获得 16 / 32 mb,如果这是真的。这对普通程序员来说可行吗?

4

3 回答 3

3

把它作为应用程序的属性放在你的清单中

android:largeHeap="true"

对于像我这样正在寻找快速答案的人

于 2015-03-30T13:11:57.503 回答
3

我知道 G1 只会为应用程序提供 16mb,但它是一个非常旧的应用程序。大多数流行的设备都可以提供 32/64mb。内存量始终取决于屏幕大小。

manifest.xml 中的android:largeHeap正是您想要的,但我从未使用过它。据说这个属性的效果在不同的设备上是不同的。

于 2012-11-27T16:16:02.383 回答
3

Pre-Honeycomb: Angry Birds 和许多游戏使用 Android NDK 中的原生 C++ 代码进行编程或内存分配。如果您在 JVM 之外分配内存,则它不计入您的堆限制,因此您仅受硬件限制。当然,问题是您全权负责内存管理。

Honeycomb 及更高版本:正如 faylon 所建议的, android:largeHeap 是将您的堆限制扩展到非常大的方法,尽管您仍处于手机制造商的范围内。他们对“largeHeap”的解释可能是 64MB 而不是 32MB,或者理论上他们可能只是不给你。因此,您必须将它与getLargeMemoryClass()结合使用,以确保您的内存可用。NDK 选项仍然可用。

于 2012-11-27T16:25:54.377 回答