回收Bitmap不释放内存

时间:2013-12-23 03:22:21

标签: android memory-leaks bitmap xamarin.android xamarin

我在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

2 个答案:

答案 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的引用

相关问题