【问题标题】:Android java, get more allowed memory usageAndroid java,获得更多允许的内存使用量
【发布时间】:2012-11-15 06:43:10
【问题描述】:

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

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

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

【问题讨论】:

    标签: java android memory memory-management


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        将此作为应用程序的属性放入您的清单中

        android:largeHeap="true"
        

        对于像我这样寻求快速答案的人

        【讨论】:

          猜你喜欢
          • 2016-11-19
          • 2011-05-09
          • 2011-01-01
          • 2015-01-10
          • 1970-01-01
          • 2020-02-14
          • 2014-11-12
          • 1970-01-01
          • 2014-05-06
          相关资源
          最近更新 更多