活动记忆不清除

时间:2014-03-16 20:02:04

标签: android bitmap out-of-memory ram

出于某种原因,看来我的Android应用程序在其活动完成时没有正确释放BitmapFactory分配的空间。我的应用程序由两部分组成,一部分是缩略图查看器,第二部分是图像查看器。按下缩略图时,会启动图像查看器(大多数只是使用带有ImageView的片段的FragmentStatePagerAdapter)活动。当退出图像查看器时,即使我在事后调用System.gc(),似乎所有当前加载到内存中的位图仍然存在。

我认为是这种情况的原因是因为如果我重复进入观察者的图像,然后离开它,然后一遍又一遍地进入同一个,最终程序崩溃说它是内存不足。在有人指出我http://developer.android.com/training/displaying-bitmaps/index.html之前,我向你保证样本量不是问题。我可以安全地说这个,因为我可以毫无问题地加载相同的图像,但如果我尝试关闭它并再次加载它,那就是我收到OOM错误。

之前有没有人见过这样的问题?我已经尝试手动卸载位图,但似乎我所做的一切实际上是释放RAM。有人能指点我一些RAM分析工具或者告诉我如何手动清理这些位图吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

首先,确保缩放位图并且位图本身不是太大,这是最重要的事情,内存泄漏是泄漏,但如果位图需要10mb泄漏是你最不担心的事情。

要正确清理位图,我的示例将是Xamarin Android,因此您需要进行一些轻微的转换,但所有内容都应该相同,您需要首先获取imageview或任何容器位图,然后你需要得到可绘制的项目,接下来,你需要确保drawable是一个位图,然后你需要检查该位图是否被回收,如果它已经没有,你需要设置将imageview位图变为null,重新调用位图,将位图置空,然后调用Java垃圾收集器,这就是代码查找的方式:

blobs

应该释放所有内存,删除对位图的任何引用,并允许垃圾收集器通过并释放这些位图。