2012-04-17 82 views
2

我的项目完全基于图像。我在我的项目中使用了一个图库和一个覆盖流,并且由于堆的大小较小,该应用程序强制关闭。如何动态清空或清除堆内存

所以,每次我加载我的应用程序,我想清除堆大小,所以我可以重用它。
我在图库和封面流中使用了System.gc() & recycle()方法,但是我的图库和封面流是相互关联的,因此该对象总是被引用,因此System.gc()recycle()不起作用,并且我的图库和封面流在随机时间点仍然崩溃同时使用它。

出于某种原因,我无法在此处显示我的代码,即使它非常大,所以我无法在此处显示。

请帮我看看&感谢您阅读这个问题。

回答

0

那么,你没有任何强迫GC运行的真正控制。只要它认为是时候,它就会自己运行。

When does System.gc() do anything

所以,你唯一的选择是明智地使用图像和位图。

提示=>使用软引用。 http://developer.android.com/reference/java/lang/ref/SoftReference.html

+0

如何使用它与画廊和coverflow – unkown 2012-04-17 07:16:24

+0

你将不得不搜索一个工作示例。你会在互联网上找到一些。首先,试着理解这个概念,然后,它将更加清楚如何使用它。 – 2012-04-17 11:14:55

0

要控制坠毁由于这种内存问题,你需要做的是这样的:

BitmapFactory.Options options=new BitmapFactory.Options(); 
options.inSampleSize = 8; 
Bitmap preview_bitmap=BitmapFactory.decodeStream(is,null,options); 

的inSampleSize值减少内存消耗。

的更多信息可以从这个线程可以了:

Strange out of memory issue while loading an image to a Bitmap object

希望这会帮助你。

+0

这会降低我的图像质量,我不能妥协与图像质量 – unkown 2012-04-17 07:15:45

0

增加堆空间..并打开自动删除,如在Eclipse中,如果你去偏好和管理堆空间;你可以点击那里的垃圾按钮