我Activity
参加了TabHost
另外3项活动.因此,这些总是活着的(或处于"暂停"状态).
第一个活动有四个不同的图像(每个约250kb),它们检索大量内存(大约80MB.只是指出,我加载屏幕所需的最小尺寸,layout_weight
如果有帮助我正在使用),所以我想要最小化所需的内存量.
我已经尝试删除OnPause
状态上的图像并再次设置它们OnResume
,但我没有运气,这是我尝试做的一个例子:
imageView.Drawable.Callback = null; ((BitmapDrawable)imageView.Drawable).Bitmap.Recycle(); imageView.Drawable.Dispose(); imageView.SetImageDrawable(null); imageView.SetImageBitmap(null); GC.Collect();
我不知道删除Bitmap
on OnPause
是否是最佳策略,但它应该有效.我不明白为什么ImageView
不收集GC(因为没有外部参考)
编辑 这是我加载图像的方式.即使我将图像放在xml文件上,它也不起作用.此外,我不关心这段代码,我只想处理位图.
void SetBackgroundImages(int imageId, int resId, float width, float height) { var imageView = FindViewById(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); }
Adam.. 7
最后,java.lang.System.gc()
在删除图像后调用诀窍.
最后,java.lang.System.gc()
在删除图像后调用诀窍.