做网批的网站,室内设计书籍,我想加盟个代理记账公司,青岛发现51例阳性Android Bitmap OutOfMemory 解决办法
置顶 2014年07月01日 14:41:22 阅读数#xff1a;3072 标签#xff1a; OutOfMemoryBitmapandroid图片优化更多
个人分类#xff1a; 异常问题和解决办法 在Android应用里#xff0c;最耗费内存的就是图片资源。而且在Android系统中…Android Bitmap OutOfMemory 解决办法
置顶 2014年07月01日 14:41:22 阅读数3072 标签 OutOfMemoryBitmapandroid图片优化更多
个人分类 异常问题和解决办法 在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()){ // 回收并且置为null bitmap.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为true opts.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 stylefont-size:18px; span stylefont-size:18px;Bitmap bitmap null; try { // 实例化Bitmap bitmap BitmapFactory.decodeFile(path); } catch (OutOfMemoryError e) { // }/span/span
然后在Catch部分做一些内存回收操作或者是使用缓存图片等...
总是良好的编程风格和优质的代码结构是程序员的无上追求.... https://blog.csdn.net/tangnengwu/article/details/36185361
https://blog.csdn.net/zhuwentao2150/article/details/52097344