起因:之前在工程中整合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