Xamarin.Android OOM 思路整理 (BitmapFactory.DecodeByteArray)

本文详细介绍了如何解决Android开发中由于BitmapFactory.DecodeByteArray方法引起的内存溢出问题,并提供了一种有效的解决方案来降低内存消耗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

起因:之前在工程中整合Android-Universal-Image-Loader框架,运行的时候确老是抛OOM异常,怀疑是UIL框架OOM问题,搞了一个星期,还是百思不得其解

思路:测试UIL框架,发现几十M的图和几K的图片没有任何区别,程序照旧会崩掉

         初步排除UIL框架OOM异常问题

         还有什么地方用到了图片方式呢?

         发现程序代码用到了Bitmap的解码 BitmapFactory.DecodeByteArray方法,上网查证后注释代码程序运行OKOOM异常抛出

 

问题找到了

BitmapFactory.DecodeByteArray过度消耗系统内存,导致OOM问题抛出 此方法有毒

解决核心思路:图片,我们只加载适合的、需要的尺寸!!利用BitmapFactory.Options可完成这一项任务

解决方案:

   /// <summary>
        /// Byte to Bitmap
        /// </summary>
        /// <param name="imgByte"></param>
        /// <returns></returns>
        public static Bitmap byteToBitmap(byte[] imgByte)
        {
            System.IO.Stream input = null;
            Bitmap bitmap = null;
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.InSampleSize = 8;
            input = new MemoryStream(imgByte);
            SoftReference softRef = new SoftReference(BitmapFactory.DecodeStream(
                    input, null, options));
            bitmap = (Bitmap)softRef.Get();
            if (imgByte != null)
            {
                imgByte = null;
            }

            try
            {
                if (input != null)
                {
                    input.Close();
                }
            }
            catch (IOException e)
            {
                e.PrintStackTrace();
            }
            return bitmap;
        }

关于Bitmap,个人觉得这里有两篇文章还不错,可以借鉴一下:

http://www.jianshu.com/p/f75ef4e24c01

http://www.jianshu.com/p/a7d9562405ef


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值