Android OutOfMemory错误&;鲁卡什

Android OutOfMemory错误&;鲁卡什,android,out-of-memory,Android,Out Of Memory,首先,我知道有很多相关的帖子,我读了很多,没有一篇对我有帮助,我也没有主意:) 因此,我正在开发一个android应用程序(sdk版本14+),它使用大量图像(用于按钮、徽标、显示大量图像等)。平均图像大小为120kb+-100kb 正如标题所说,我正在摆脱记忆错误。首先,我以xml或使用setImageResource以编程方式将图像源添加到ImageView中。很快,由于OutOfMemory错误,应用程序开始崩溃。所以我已经阅读了这个()教程,并按照它所说的实现了LruCache。我将位图

首先,我知道有很多相关的帖子,我读了很多,没有一篇对我有帮助,我也没有主意:)

因此,我正在开发一个android应用程序(sdk版本14+),它使用大量图像(用于按钮、徽标、显示大量图像等)。平均图像大小为120kb+-100kb

正如标题所说,我正在摆脱记忆错误。首先,我以xml或使用setImageResource以编程方式将图像源添加到ImageView中。很快,由于OutOfMemory错误,应用程序开始崩溃。所以我已经阅读了这个()教程,并按照它所说的实现了LruCache。我将位图添加到lrucache,然后使用get方法将位图设置为imageview

在活动的onDestroy方法中,我调用lrucache上的executeAll方法,并将lrucache设置为null。所以我想,内存被释放了

然而,问题仍然存在,当我进行一些活动时,应用程序崩溃了


非常感谢您的帮助:)

您是否将所有图像都存储在堆中?如果是这样,您应该将它们缓存在sd卡或内部存储器中,并在堆中只保留一堆(一个很好的方法是使用LRU缓存)

如果你已经这么做了。。。您可以下载内存分析器工具并调试应用程序的内存使用情况

处理OutOfMemory错误可能非常痛苦


祝你好运

根据文档,超过最大可用VM内存将抛出OutOfMemory异常。缓存位图似乎超出了可用的虚拟内存

不使用时回收位图

 bitmap.recycle();
。看看Commonware接受的答案

我相信当LRUCache逐出一个图像为另一个图像腾出空间时,内存并没有被释放

除非位图被回收或垃圾回收,否则它不会被删除


。讨论内存管理、内存泄漏和使用MAT Analyzer。

谢谢你们的帮助

因此,如果有人用同样的问题来回答这个问题,这里有一些指导原则:

  • 不再需要位图时,在位图上调用.recycle()
  • 使用Eclipse内存分析器查找您的问题
  • (必须)看视频
  • 如何从.hprof文件查看位图

您是否尝试过使用磁盘缓存?您是否将所有您的图像放入可绘制文件夹?如果你试着根据你的设备密度把它们放在不同的drawable-?dpi文件夹中…我仍在努力解决这个问题。我在lrucache类的entryRemoved方法中调用位图上的recycle方法,但它不能解决问题。我认为它会起作用,因为我在activity的onCreate方法中添加了所有必要的图像以缓存。这些图像将在整个活动生命周期内使用。使用mat analyzer查找并修复问题我的应用程序正在使用更多内存,堆将继续增加..并提供OOM。?solution@GvSharma没有太多的信息,没有人能提出任何建议。如果是因为图像缩小了它。在Google Plus Community上查看Android性能模式感谢您的回复,但问题是我需要整个活动生命周期中的所有图像。我相信有些图像即使在活动被破坏的情况下也会保存在内存中,因为只有当我在几个活动中“循环”时才会发生错误(有时错误发生得比较早,有时不会)。