回收Bitmap不释放内存

 寒月繁华叶落尽 发布于 2023-02-08 15:42

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();

我不知道删除Bitmapon 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()在删除图像后调用诀窍.

1 个回答
  • 最后,java.lang.System.gc()在删除图像后调用诀窍.

    2023-02-08 15:44 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有