0

可能重复:
OutOfMemoryError:位图大小超出 VM 预算:- Android

我已经上下研究了这个问题,但我找不到任何关于我的具体问题的信息。我使用位于可绘制文件夹中的 .PNG 文件作为按钮背景。按钮很大(大约 150p x 150p),并使用图像和渐变看起来不错。按下单个 .xml 文件中定义的按钮后,背景会发生变化。我在谷歌找到的解决方案似乎是针对以编程方式调用的图像,而不是在布局中指定的图像。当我不断退出并输入具有不同布局和不同按钮的不同活动时,我最终会出现内存不足错误

04-27 22:18:46.227: E/dalvikvm-heap(512): 396900 字节的外部分配对于这个进程来说太大了。

04-27 22:18:46.427:E/AndroidRuntime(512):原因:java.lang.OutOfMemoryError:位图大小超出 VM 预算

我的问题是,当我的图像在布局中指定并且没有以编程方式添加时,如何分配更多内存?

4

4 回答 4

2

关注如何有效地显示位图http://developer.android.com/training/displaying-bitmaps/index.html

于 2012-04-28T02:20:41.987 回答
1

以下内容可以帮助您弄清楚是什么在吞噬您的记忆:

添加UncaughtExceptionHandler并在收到 OOM 异常时转储堆。使用Debug.dumpHprofData()转储堆。在此之后,您使用hprof-conv 转换文件并使用Eclipse Memory Analyzer检查生成的文件。

注意 UncaughtExceptionHandler 中的包装异常,有时 OOM Exception 会包装在 RuntimeException 中。

于 2012-04-27T23:06:59.857 回答
1

如果您在浏览应用程序时创建了同一 Activity 的多个实例,这可能会造成您的问题。使用 SINGLE_TOP 或 SINGLE_TASK 标志来解决此问题。但请注意,Android 中似乎存在关于 SINGLE_TOP 功能的错误。您需要将 Activity 声明为 SINLGE_TOP使用 SINLGE_TOP 标志启动 Activity。这是文档:http: //developer.android.com/guide/topics/manifest/activity-element.html#lmode

于 2012-04-28T01:11:20.037 回答
0

它是立即崩溃还是在一段时间后崩溃?一些图片不应该让你的应用崩溃,即使是大的。我过去发现在应用程序弹出之前,很多旋转都会泄漏内存。事实上,这是我看到 OOM 问题最多的地方。如果您遇到同样的问题,那是因为您保留了指向上下文、目录的指针或保留了指向 View 的指针。

于 2012-04-27T22:47:32.593 回答