2012-02-21 62 views
0

我为Android手机构建了一个简单的应用程序(TCHS JROTC),在Android开发中我非常体面。我在Galaxy S2 Epic 4g上构建了这款应用程序,并且处理得非常完美。除了诸如Evo 4g和Nexus S之类的其他手机之外,它强制关闭一个具有大约8个图片图标的特定屏幕。我调试它,并抛出一个错误,说“不够内存”,这正是我认为这是因为我的代码是非常完美无缺,完美的作品。有没有人有任何想法如何让应用程序可能会增量加载,而不是一次性将图标图像全部转存到Activity中?谢谢!Android应用程序使用太多内存。我如何使它在更少的RAM上运行?

+4

对不起,但你的代码并不完美,如果它不能正确处理内存不足的错误 – LordT 2012-02-21 14:41:04

+1

你是否为不同的DPI提供了图标 - 例如,你是否为'drawable-xhdpi' /'drawable-hdpi'/'drawable-mdpi'和'drawable-ldpi' - 或者你只是将所有内容都转换为'drawable'? – Jens 2012-02-21 14:46:07

+1

在内存不足错误时查看日志输出会非常有帮助,并且还会更深入地描述您在该屏幕上执行的操作。我会验证您使用的图片尺寸是否适合您的用户界面,使用比所需图片大的图片会导致内存不足,因为它们必须全尺寸加载到内存中,然后调整大小。除此之外,我猜你实际上有内存泄漏,并建议你使用MAT查找Google IO视频。 – cistearns 2012-02-22 08:58:01

回答

0

你可以做些什么来减少应用程序的内存消耗是在图标中使用另一种像素编码。

你可以在RGB888,ARGB8888,ARGB4444,RGB565和更多我认为的像素进行编码。如果以资产形式存储Bitmaps,您可以如何加载。这个例子来自“开始Android游戏”一书。即使您对编写Android游戏不感兴趣,也是绝对可推荐的。

InputStream inputStream = assetManager.open("bob.png"); 
BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inPreferredConfig = Bitmap.Config.ARGB_4444; 
Bitmap bitmap = BitmapFactory.decodeStream(inputStream, null, options); 

在这个例子中使用了ARGB4444编码。比如使用比ARGB8888更少的内存。

我只是一个初学者在android编程。但是,如果将图像存储在外部存储器/ SD卡上,而不是直接将它们放入项目中,我认为它可能会减少应用程序的内存占用量。这样他们将成为生成的.apk文件的一部分。这将有一些额外的字节。 :-)请纠正我,如果我错了这一点。我只是在学习。

+2

您的最后一点是不正确的,将文件存储在不同的文件系统位置将无助于解决内存(堆)问题。 – cistearns 2012-02-22 08:48:57

+0

那么我使用drawables,这是一个非常愚蠢的错误。当他们需要缩小的时候,我保存了巨大的图片,所以当我将它们重新缩放到合适的尺寸时,我的应用程序从2MB变为567或KB。它修复了所有强制关闭问题,这是我的问题。感谢您的帮助! – user1064249 2012-02-25 00:38:53

相关问题