Ada*_*dam 7 android memory-leaks bitmap xamarin.android xamarin
我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();
Run Code Online (Sandbox Code Playgroud)
我不知道删除Bitmapon OnPause是否是最佳策略,但它应该有效.我不明白为什么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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4937 次 |
| 最近记录: |