减少Android应用程序中的内存使用量

时间:2011-08-18 19:47:15

标签: android

我有一个非常简单的游戏,现在在市场上。这是一个简单的基于文本的游戏,不涉及2D或3D图形。它使用适当大小的png作为背景。除此之外,它纯粹是基于文本的。

游戏没有任何cpu或图形密集,但平均大约25mb的内存使用量。相比之下,大多数cpu密集型应用平均大约为18mb。

在移动应用程序中,每兆字节都很重要,那么我该如何才能正确减少应用中的内存使用量呢?我知道这可能是一个模糊的问题,但我很乐意详细说明是否需要。

谢谢

4 个答案:

答案 0 :(得分:10)

同一应用程序的所有组件都在同一进程和线程中运行。服务的内存使用量可能与整个应用程序的使用量一样大。

尝试在单独的进程中运行服务将解决此问题。

android:process=":yourname"添加到AndroidManifest.xml中,如下所示:

<service android:name=".MyService" android:process=":yourname"> </service>

就我而言,简单服务的内存使用量从12MB变为3MB。

答案 1 :(得分:1)

您应该做的第一件事是在内存使用率很高时从您的应用程序中获取内存转储,并使用Eclipse Memory Analyzer来计算出实际消耗内存的内容。

编辑: 这些链接可能会有所帮助:

Android ==> Memory Analysing ==> Eclipse memory analyzer?

http://www.vogella.de/articles/EclipseMemoryAnalyser/article.html

答案 2 :(得分:0)

为了减少内存,您可以从应用程序服务器下载一些图形。也许你正在使用一些文本文件或png文件。从应用程序服务器Amazon s3

安装应用程序后,您实际上可以安装大部分资源

编辑:

如果您正在使用String缓冲区,请认为它可能与StringBuffer toString()方法的性能优化有关。

Sun javadoc说:

  

可以对此方法进行编码,以便创建新的String对象,而无需分配新内存来保存字符序列的副本。相反,字符串可以共享字符串缓冲区使用的内存。然后,任何改变字符串缓冲区的内容或容量的后续操作都必须在此时复制内部缓冲区。当使用字符串缓冲区实现字符串连接操作时,此策略可有效减少字符串连接操作分配的内存量。

因为您可能会使用setLength(0)重新使用StringBuffer,所以它可能会保留对使用toString()创建的所有字符串的引用。

替换:

.setLength(0);

使用:

“你的字符串缓冲区”=新的StringBuffer();

并查看是否可以解决问题。我认为这不会有任何开销,因为在这两种情况下你都需要创建一个新的char []数组,因为在第一种情况下,数组是由使用toString()创建的String使用的。

此外,您应该考虑使用StringBuilder,因为它们比StringBuffer更受欢迎。

Check here

答案 3 :(得分:0)

如果您的图片内容包含任何重复部分,您可以将它们分成几个图像并将其用作图块。

假设您的图像符合九种补丁格式,可以使用

Nine patches轻松完成此操作。