可能重复:
OutOfMemoryError: bitmap size exceeds VM budget :- Android
我上下研究过这个问题,我找不到任何关于我具体问题的信息。我使用位于我的drawable文件夹中的.PNG文件作为按钮背景。按钮很大(约150p x 150 p),并使用图像和渐变看起来不错。按下单个.xml文件中定义的按钮后背景会发生变化。我在google中找到的解决方案似乎是针对程序化的图像,而不是布局中指定的图像。当我不断退出并输入不同布局和不同按钮的不同活动时,我最终会得到内存不足错误
04-27 22:18:46.227:E / dalvikvm-heap(512):396900字节的外部分配对于这个过程来说太大了。
04-27 22:18:46.427:E / AndroidRuntime(512):引起:java.lang.OutOfMemoryError:位图大小超过VM预算
我的问题是,如果在布局中指定图像并且没有以编程方式添加图像,我该如何分配更多内存?
答案 0 :(得分:2)
答案 1 :(得分:1)
以下内容有助于弄清楚你的记忆是什么:
添加UncaughtExceptionHandler并在获得OOM异常时转储堆。使用Debug.dumpHprofData()转储堆。在此之后,您使用hprof-conv转换文件,并使用Eclipse Memory Analyzer检查生成的文件。
注意UncaughtExceptionHandler中的包装异常,有时OOM异常包含在RuntimeException中。
答案 2 :(得分:1)
如果您在应用程序中导航时创建了同一个Activity的多个实例,则可能会产生问题。使用SINGLE_TOP或SINGLE_TASK标志来解决此问题。请注意,Android中似乎存在关于SINGLE_TOP功能的错误。您需要将您的活动声明为SINLGE_TOP 并使用SINLGE_TOP标志启动活动。以下是文档:http://developer.android.com/guide/topics/manifest/activity-element.html#lmode
答案 3 :(得分:0)
它会立即崩溃,还是一段时间后崩溃?一些图片不应该崩溃你的应用程序,即使是大的。我发现在过去,大量的旋转会泄漏内存,直到应用程序流行;事实上,这就是我看到OOM问题最多的地方。如果您遇到同样的问题,那是因为您保留了指向上下文,目录或指向View的指针。