您的位置:首页 > 移动开发 > Android开发

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

2016-05-09 21:17 411 查看
起因:之前在工程中整合Android-Universal-Image-Loader框架,运行的时候确老是抛OOM异常,怀疑是UIL框架OOM问题,搞了一个星期,还是百思不得其解思路:测试UIL框架,发现几十M的图和几K的图片没有任何区别,程序照旧会崩掉         初步排除UIL框架OOM异常问题         还有什么地方用到了图片方式呢?         发现程序代码用到了Bitmap的解码 BitmapFactory.DecodeByteArray方法,上网查证后注释代码程序运行OK无OOM异常抛出 问题找到了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 
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: