回收位图不释放内存

我有一个TabHost活动与其他3个活动。 因此,这些都是活着的(或处于“暂停”状态)。

第一个活动有四个不同的图像(每个〜250kb),他们正在检索大量的内存(大约80MB。只是指出,我加载屏幕所需的最小尺寸,如果有帮助,我使用layout_weight )我想尽量减less所需的内存量。

我已经尝试删除OnPause状态的图像,并在OnResume再次设置它们,但我没有运气,这是我正在尝试做的一个例子:

  imageView.Drawable.Callback = null; ((BitmapDrawable)imageView.Drawable).Bitmap.Recycle(); imageView.Drawable.Dispose(); imageView.SetImageDrawable(null); imageView.SetImageBitmap(null); GC.Collect(); 

我不知道是否删除OnPause上的Bitmap是最好的策略,但它应该工作。 我不明白为什么ImageView没有被GC收集(因为没有外部引用)

编辑这是我如何加载图像。 即使将图像放在xml文件中也不起作用。 此外,我不在乎这个代码,我只是想处置位图

  void SetBackgroundImages(int imageId, int resId, float width, float height) { var imageView = FindViewById<ImageView>(imageId); using (var bitmap = DecodeSampledBitmapFromResource(Resources, resId, width, height)) imageView.SetImageBitmap(bitmap); } public static Bitmap DecodeSampledBitmapFromResource(Resources res, int resId, float reqWidth, float reqHeight) { var options = new BitmapFactory.Options {InJustDecodeBounds = true}; using (var b = BitmapFactory.DecodeResource(res,resId,options)){} options.InSampleSize = CalculateInSampleSize(options, reqWidth, reqHeight); options.InJustDecodeBounds = false; return BitmapFactory.DecodeResource(res, resId, options); } 

Solutions Collecting From Web of "回收位图不释放内存"

在删除图像后调用java.lang.System.gc()结束了诀窍。

 using (var imageView = FindViewById<ImageView>(Resource.Id.imageView1)) using (var bitmap = Android.Graphics.BitmapFactory.DecodeResource( this.Resources, Resource.Drawable.Icon)) imageView.SetImageBitmap(bitmap); 

我在几个地方看到了这个方法,另一个是使用WeakReference来ImageView。 这些方法可以帮助GC正确收集对ImageView的引用