Android虚拟机内存不足错误
可能重复:Android虚拟机内存不足错误,android,memory,memory-management,dalvik,Android,Memory,Memory Management,Dalvik,可能重复: 我已经上下研究了这个问题,但我找不到关于我的具体问题的任何东西。我使用可绘制文件夹中的.PNG文件作为按钮背景。按钮很大(约150p x 150p),使用图像和渐变使其看起来漂亮。按单个.xml文件中定义的按钮后,背景会发生变化。我在google中找到的解决方案似乎是针对名为programmaticly的图像,而不是布局中指定的图像。当我不断地以不同的布局和按钮退出和进入不同的活动时,我最终会出现内存不足错误 04-27 22:18:46.227:E/dalvikvm堆(512):
我已经上下研究了这个问题,但我找不到关于我的具体问题的任何东西。我使用可绘制文件夹中的.PNG文件作为按钮背景。按钮很大(约150p x 150p),使用图像和渐变使其看起来漂亮。按单个.xml文件中定义的按钮后,背景会发生变化。我在google中找到的解决方案似乎是针对名为programmaticly的图像,而不是布局中指定的图像。当我不断地以不同的布局和按钮退出和进入不同的活动时,我最终会出现内存不足错误 04-27 22:18:46.227:E/dalvikvm堆(512):396900字节的外部分配对此进程太大 04-27 22:18:46.427:E/AndroidRuntime(512):原因:java.lang.OutOfMemory错误:位图大小超出VM预算
我的问题是,如果我的图像是在版面中指定的,并且不是通过编程方式添加的,那么如何分配更多内存?它是立即崩溃,还是在一段时间后崩溃?一些图片不应该使你的应用程序崩溃,即使是大图片。我发现在过去,很多旋转会泄漏内存,直到应用程序弹出;事实上,这是我看到OOM问题最多的地方。如果您遇到同样的问题,那是因为您保留了指向上下文、目录的指针,或者保留了指向视图的指针。它是立即崩溃,还是在一段时间后崩溃?一些图片不应该使你的应用程序崩溃,即使是大图片。我发现在过去,很多旋转会泄漏内存,直到应用程序弹出;事实上,这是我看到OOM问题最多的地方。如果您遇到同样的问题,那是因为您保留了指向上下文、目录的指针,或者保留了指向视图的指针。以下内容有助于找出消耗内存的原因: 当您得到OOM异常时,添加并转储堆。用于转储堆。在此之后,使用转换文件,并使用检查生成的文件
请注意UncaughtExceptionHandler中的包装异常,有时OOM异常会包装在RuntimeException中。以下内容有助于找出占用内存的原因: 当您得到OOM异常时,添加并转储堆。用于转储堆。在此之后,使用转换文件,并使用检查生成的文件
请注意UncaughtExceptionHandler中的包装异常,有时OOM异常会包装在RuntimeException中。如果在应用程序中导航时创建了同一活动的多个实例,这可能会造成问题。使用SINGLE_TOP或SINGLE_任务标志修复此问题。不过请注意,Android中的SINGLE_TOP功能似乎存在缺陷。您需要将您的活动声明为SINLGE_TOP,并使用SINLGE_TOP标志启动活动。以下是文档:如果您在应用程序中导航时创建了同一活动的多个实例,这可能会造成您的问题。使用SINGLE_TOP或SINGLE_任务标志修复此问题。不过请注意,Android中的SINGLE_TOP功能似乎存在缺陷。您需要将您的活动声明为SINLGE_TOP,并使用SINLGE_TOP标志启动活动。以下是文档:遵循如何高效地显示位图,遵循如何高效地显示位图,您也有大图像背景吗?150px 150px的图像没有那么大。150*150*4(假设32位位图为每像素4字节)=90000字节,远小于396900字节。是否尝试使用位图。isrecycled()每个屏幕上有6个这样的图像,我的背景是简单的十六进制颜色,根本没有大图像。在我的桌面上,如果我右键点击我的一个.PNG文件,它会显示它是40KB的。当我删除此按钮图像时,我没有任何问题。这个图像是不是太大了?下一个最大的尺寸是20kb你也有大的图像背景吗?150px 150px的图像没有那么大。150*150*4(假设32位位图为每像素4字节)=90000字节,远小于396900字节。是否尝试使用位图。isrecycled()每个屏幕上有6个这样的图像,我的背景是简单的十六进制颜色,根本没有大图像。在我的桌面上,如果我右键点击我的一个.PNG文件,它会显示它是40KB的。当我删除此按钮图像时,我没有任何问题。这个图像是不是太大了?下一个最大的大小是20kb