在Android应用里,最耗费内存的就是图片资源。并且在Android系统中。读取位图Bitmap时,分给虚拟机中的图片的堆栈大小仅仅有8M。假设超出了。就会出现OutOfMemory异常

E/AndroidRuntime(  697): java.lang.OutOfMemoryError
E/AndroidRuntime(  697):     at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
E/AndroidRuntime(  697):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:500)
E/AndroidRuntime(  697):     at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:353)
E/AndroidRuntime(  697):     at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:376)
E/AndroidRuntime(  697):     at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:406)
E/AndroidRuntime(  697):     at com.example.imagetoshow2.ImageAdapter.createReflectedImages(ImageAdapter.java:66)
E/AndroidRuntime(  697):     at com.example.imagetoshow2.ImageAdapter.getView(ImageAdapter.java:54)
E/AndroidRuntime(  697):     at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:193)

解决的方法:

1.及时回收内存

 if(bitmap != null && !bitmap.isRecycled()){ // 回收而且置为nullbitmap.recycle(); bitmap = null;
}
System.gc();

在适当的地方使用上述代码,将临时不需使用的的回收掉。当然system.gc不应该频繁调用,否则会使系统效率减少。

2.使用BitmapFactory.Options对图片进行压缩

 BitmapFactory.Options opts = new BitmapFactory.Options();  opts.inSampleSize = n; bitmap = BitmapFactory.decodeStream(fis, null, opts);

使用inSampleSize设置放缩比例,默认值为0,设置一个大于0的数便可对图片进行压缩。

 BitmapFactory.Options opts = new BitmapFactory.Options();// 设置inJustDecodeBounds为trueopts.inJustDecodeBounds = true;// 使用decodeFile方法得到图片的宽和高BitmapFactory.decodeFile(path, opts);

使inJustDecodeBounds为true后,再使用decodeFile()等方法,并不会真正的分配空间,即解码出来的Bitmap为null。仅仅会计算出options.outWidth和options.outHeight值。在下次使用BitmapFactory的decodeFile()等方法实例化Bitmap对象前。将opts.inJustDecodeBound设置回false就能够得到图片了。

3.代码优化

为了避免应用在分配Bitmap内存的时候出现OutOfMemory异常停止执行。通常。在实例化Bitmap的代码中,对OutOfMemory异常进行捕获

<span style="font-size:18px;"> <span style="font-size:18px;">Bitmap bitmap = null;
try {// 实例化Bitmapbitmap = BitmapFactory.decodeFile(path);
} catch (OutOfMemoryError e) {//
}</span></span>

然后在Catch部分做一些内存回收操作。或者是使用缓存图片等...

总是良好的编程风格和优质的代码结构是程序猿的无上追求....

转载于:https://www.cnblogs.com/mengfanrong/p/5055139.html

Android Bitmap OutOfMemory 解决的方法相关推荐

  1. Android Bitmap OutOfMemory 解决办法

    Android Bitmap OutOfMemory 解决办法 置顶 2014年07月01日 14:41:22 阅读数:3072 标签: OutOfMemoryBitmapandroid图片优化更多 ...

  2. [Android] Bitmap OOM解决办法二

    2019独角兽企业重金招聘Python工程师标准>>> 突然出现的Out Of Memory这个BUG导致我们项目中断了好几天,在经过不断地摸索之后,今天终于得到了解决.鉴于其强大的 ...

  3. [Android] Bitmap OOM解决办法一

    2019独角兽企业重金招聘Python工程师标准>>> 尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResou ...

  4. android 解决getColor()方法过时

    今天,简单讲讲android里如何解决getColor()方法过时的问题. 之前,我写博客讲了程序员需要解决过时的方法的问题,Google会提供过时函数的替代函数,程序员有责任找到替代函数,并且解决过 ...

  5. (4.6.31)Android Bitmap 详解

    文章目录 一.从相册加载一张图片 1.1 打开相册加载图片 1.2 根据Uri得到Bitmap 二.Bitmap 内存计算方式 2.1 density 和 densityDpi 2.2 getByte ...

  6. android bitmap oom 最新处理办法,【移动开发】Android中图片过大造成内存溢出,OOM(OutOfMemory)异常解决方法...

    当我们在做项目过程中,一遇到显示图片时,就要考虑图片的大小,所占内存的大小,原因就是Android分配给Bitmap的大小只有8M,试想想我们用手机拍照,普通的一张照片不也得1M以上,所以androi ...

  7. Android滑动冲突解决方法

    Android滑动冲突解决方法 滑动冲突 首先讲解一下什么是滑动冲突.当你需要在一个ScrollView中嵌套使用ListView或者RecyclerView的时候你会发现只有ScrollView能够 ...

  8. 我的Android进阶之旅------gt;Android字符串资源中的单引號问题error: Apostrophe not preceded by 的解决的方法...

    刚刚在string字符串资源文件里,写了一个单引號.报错了,错误代码例如以下 error: Apostrophe not preceded by \ (in OuyangPeng's blog ) 资 ...

  9. Android 中View仅仅能接收到ACTION_DOWN无法接收ACTION_MOVE和ACTION_UP解决的方法

    Android 中View仅仅能接收到ACTION_DOWN无法接收ACTION_MOVE和ACTION_UP解决的方法 参考文章: (1)Android 中View仅仅能接收到ACTION_DOWN ...

最新文章

  1. Linux下的redis的持久化,主从同步及哨兵
  2. Activity中的任务和返回站
  3. STM32时钟系统学习
  4. git stage 暂存_什么是Git?下载和安装Git
  5. Spring5源码 - 01 BeanDefination源码分析
  6. 图像处理与分析 计算机视觉 医学图像
  7. 对财务客户开具Invoice(无销售流程)
  8. Tkinter的Message组件
  9. 想要快速搭建开发测试环境?这么做就可以!
  10. c语言构造体二维数组,怎么才能把结构体里面的二维数组打印出来?
  11. java反编译工具_Java开发必会的反编译知识(附支持对Lambda进行反编译的工具)...
  12. 戴尔电脑开机卡logo无法开机问题及解决办法
  13. python体验课讲什么_火遍朋友圈的Python小课体验起来是什么样的?
  14. 联想计算机系统重装,联想笔记本电脑重装系统教程
  15. idea 集成Git 遇到的问题 与解决
  16. 记一个脚本解释器的开发
  17. Javascript 获得当前文件的url 目录,不含文件名
  18. 做了6年的Java,mysql去重查询方法
  19. 【uni-app怎么引用使用阿里巴巴矢量图标库iconfont】
  20. 【jvm内存占用过高分析】

热门文章

  1. Java 中的异常和处理详解
  2. RSA key format is not supported
  3. xfce4设置屏保/锁屏时间
  4. 半监督训练-思想与代码实践
  5. octave绘制图片Figure后无法关闭
  6. ubuntu16.04 xfce4的鼠标主题设置为oxygen-red、修改文件夹背景颜色、两处系统字体设置、右键菜单添加压缩解压选项
  7. 深度学习(三十三)——GAN参考资源
  8. 【机器学习】Lasso回归(L1正则,MAP+拉普拉斯先验)
  9. opencv 叠加文字_Hello world.
  10. python调用动态库出现error193_切换到64位时使用Python Winerror 193