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