Android Bitmap OutOfMemory 解决的方法
在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 解决的方法相关推荐
- Android Bitmap OutOfMemory 解决办法
Android Bitmap OutOfMemory 解决办法 置顶 2014年07月01日 14:41:22 阅读数:3072 标签: OutOfMemoryBitmapandroid图片优化更多 ...
- [Android] Bitmap OOM解决办法二
2019独角兽企业重金招聘Python工程师标准>>> 突然出现的Out Of Memory这个BUG导致我们项目中断了好几天,在经过不断地摸索之后,今天终于得到了解决.鉴于其强大的 ...
- [Android] Bitmap OOM解决办法一
2019独角兽企业重金招聘Python工程师标准>>> 尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResou ...
- android 解决getColor()方法过时
今天,简单讲讲android里如何解决getColor()方法过时的问题. 之前,我写博客讲了程序员需要解决过时的方法的问题,Google会提供过时函数的替代函数,程序员有责任找到替代函数,并且解决过 ...
- (4.6.31)Android Bitmap 详解
文章目录 一.从相册加载一张图片 1.1 打开相册加载图片 1.2 根据Uri得到Bitmap 二.Bitmap 内存计算方式 2.1 density 和 densityDpi 2.2 getByte ...
- android bitmap oom 最新处理办法,【移动开发】Android中图片过大造成内存溢出,OOM(OutOfMemory)异常解决方法...
当我们在做项目过程中,一遇到显示图片时,就要考虑图片的大小,所占内存的大小,原因就是Android分配给Bitmap的大小只有8M,试想想我们用手机拍照,普通的一张照片不也得1M以上,所以androi ...
- Android滑动冲突解决方法
Android滑动冲突解决方法 滑动冲突 首先讲解一下什么是滑动冲突.当你需要在一个ScrollView中嵌套使用ListView或者RecyclerView的时候你会发现只有ScrollView能够 ...
- 我的Android进阶之旅------gt;Android字符串资源中的单引號问题error: Apostrophe not preceded by 的解决的方法...
刚刚在string字符串资源文件里,写了一个单引號.报错了,错误代码例如以下 error: Apostrophe not preceded by \ (in OuyangPeng's blog ) 资 ...
- Android 中View仅仅能接收到ACTION_DOWN无法接收ACTION_MOVE和ACTION_UP解决的方法
Android 中View仅仅能接收到ACTION_DOWN无法接收ACTION_MOVE和ACTION_UP解决的方法 参考文章: (1)Android 中View仅仅能接收到ACTION_DOWN ...
最新文章
- Linux下的redis的持久化,主从同步及哨兵
- Activity中的任务和返回站
- STM32时钟系统学习
- git stage 暂存_什么是Git?下载和安装Git
- Spring5源码 - 01 BeanDefination源码分析
- 图像处理与分析 计算机视觉 医学图像
- 对财务客户开具Invoice(无销售流程)
- Tkinter的Message组件
- 想要快速搭建开发测试环境?这么做就可以!
- c语言构造体二维数组,怎么才能把结构体里面的二维数组打印出来?
- java反编译工具_Java开发必会的反编译知识(附支持对Lambda进行反编译的工具)...
- 戴尔电脑开机卡logo无法开机问题及解决办法
- python体验课讲什么_火遍朋友圈的Python小课体验起来是什么样的?
- 联想计算机系统重装,联想笔记本电脑重装系统教程
- idea 集成Git 遇到的问题 与解决
- 记一个脚本解释器的开发
- Javascript 获得当前文件的url 目录,不含文件名
- 做了6年的Java,mysql去重查询方法
- 【uni-app怎么引用使用阿里巴巴矢量图标库iconfont】
- 【jvm内存占用过高分析】
热门文章
- Java 中的异常和处理详解
- RSA key format is not supported
- xfce4设置屏保/锁屏时间
- 半监督训练-思想与代码实践
- octave绘制图片Figure后无法关闭
- ubuntu16.04 xfce4的鼠标主题设置为oxygen-red、修改文件夹背景颜色、两处系统字体设置、右键菜单添加压缩解压选项
- 深度学习(三十三)——GAN参考资源
- 【机器学习】Lasso回归(L1正则,MAP+拉普拉斯先验)
- opencv 叠加文字_Hello world.
- python调用动态库出现error193_切换到64位时使用Python Winerror 193