Java.lang.OutOfMemoryError处理

此错误对于新手做项目的时候经常会发生,而且不容易处理

默认情况下,每个android程序的dailvik虚拟机的最大堆空间大小为16M

当加载的图片太多或图片过大时经常出现OOM问题

而出现此类问题最常见的情况就是当我们使用BitMap类的时候

网上解决办法很多,这里贴出感觉最有用的一种解决办法

解决办法:

 1 public Bitmap matrixBitmapSize(Bitmap bitmap, int screenWidth,  
 2             int screenHight) {  
 3         //获取当前bitmap的宽高  
 4         int w = bitmap.getWidth();  
 5         int h = bitmap.getHeight();  
 6 
 7         Matrix matrix = new Matrix();  
 8         float scale = (float) screenWidth / w;  
 9         float scale2 = (float) screenHight / h;  
10 
11         // 取比例小的值 可以把图片完全缩放在屏幕内  
12         scale = scale < scale2 ? scale : scale2;  
13 
14         // 都按照宽度scale 保证图片不变形.根据宽度来确定高度  
15         matrix.postScale(scale, scale);  
16         // w,h是原图的属性.  
17         return Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true);  
18     }  
19 
20     public Bitmap optionsBitmapSize(String imagePath, int screenWidth,  
21             int screenHight) {  
22 
23         // 设置解析图片的配置信息  
24         BitmapFactory.Options options = new Options();  
25         // 设置为true 不再解析图片 只是获取图片的头部信息及宽高  
26         options.inJustDecodeBounds = true;  
27         // 返回为null  
28         BitmapFactory.decodeFile(imagePath, options);  
29         // 获取图片的宽高  
30         int imageWidth = options.outWidth;  
31         int imageHeight = options.outHeight;  
32         // 计算缩放比例  
33         int scaleWidth = imageWidth / screenWidth;  
34         int scaleHeight = imageHeight / screenHight;  
35         // 定义默认缩放比例为1  
36         int scale = 1;  
37         // 按照缩放比例大的 去缩放  
38         if (scaleWidth > scaleHeight & scaleHeight >= 1) {  
39             scale = scaleWidth;  
40         } else if (scaleHeight > scaleWidth & scaleWidth >= 1) {  
41             scale = scaleHeight;  
42         }  
43         // 设置为true开始解析图片  
44         options.inJustDecodeBounds = false;  
45         // 设置图片的采样率  
46         options.inSampleSize = scale;  
47         // 得到按照scale缩放后的图片  
48         Bitmap bitmap = BitmapFactory.decodeFile(imagePath, options);  
49         return bitmap;  
50     }

推荐一个程序员网站:

码农网

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏陈满iOS

iOS小技巧·把子视图控制器的视图添加到父视图控制器

812
来自专栏Winter漫聊技术

NowView 1.0+ READMENow

一款Android图文精选app,通过抓取网页获得图文列表。目前包含站酷(Zcool)精选、国家地理(National Geographic)每日一图、知乎日报...

1302
来自专栏AndroidTv

我的2017年总结笔记整理

35811
来自专栏菩提树下的杨过

flash 显示 qq客服状态

前几天看到有园友写了一篇“ flash查看对方qq是否在线 ”,正好今天有一个朋友搞flash全站,想使用这个功能,但是有些小要求,点击图标后,要求弹出QQ对话...

20710
来自专栏Jaycekon

Phantomjs+Nodejs+Mysql数据抓取(2.抓取图片)

概要 这篇博客是在上一篇博客Phantomjs+Nodejs+Mysql数据抓取(1.抓取数据) http://blog.csdn.net/jokerko...

3645
来自专栏逆向技术

win32程序之子窗口编程

  在前边我们已经讲解了窗口的本质.以及如何注册窗口类跟创建窗口. 还讲了消息循环.

2352
来自专栏c#开发者

datagrid资料+ by iCeSnaker - Program rhapsody

datagrid资料+ by iCeSnaker - Program rhapsody 关于datagrid的打印 http://www.chinaaspx.c...

3619
来自专栏Android干货

Android多媒体录制--MediaRecorder视频录制

4477
来自专栏Android开发经验

自适应软键盘的Dialog以及监听软键盘弹起

2733
来自专栏Android-薛之涛

Android-Recyclerview常用总结

在android开发中我们不可避免的会用到Recyclerview,用以替代之前的ListView,GridView,Gallery等.它是support:re...

2512

扫码关注云+社区

领取腾讯云代金券