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
相关文章推荐
- Android之高德地图定位
- Android开发工具之Android Studio---gradle编译报错(一)
- 最全面的AndroidStudio配置指南总结-包括护眼模式
- Android4.4中获取资源路径问题
- 在低版本android系统上实现Material design应用
- Android新增API之AudioEffect中文API与应用实例
- Activity之affinity
- Android 6.0 向用户申请权限,运行时权限
- Android Dev Intro - An OpenGL ES renderer based on the GLSurfaceView rendering framework
- 大话Android项目中的常用技巧
- Android 设定横屏,禁止屏幕旋转,Activity重置
- Android中跨进程通信方式之使用文件共享
- 15 个 Android 通用流行框架大全
- Android学习笔记之Activity的4种启动模式
- 获取当前Activity及Fragment名字
- 玩转Android之数据库框架ActiveAndroid的使用
- 玩转Android之数据库框架ActiveAndroid的使用
- 玩转Android之数据库框架ActiveAndroid的使用
- 玩转Android之数据库框架ActiveAndroid的使用
- 二十二、外观设计模式