newmap = Bitmap.createBitmap(bi, 0, 0, bitmapwidth, bitmapheight,
matrix, true);
报错java.lang.OutOfMemoryError
为嘛?
我是在一个fragment里面加载的图片
多次切换fragment之后。
就会出现这个错误。是为什么。
图片资源文件我刚进入程序就已经获得了。
------解决思路----------------------
内存溢出,切换之前把Bitmap recyle下
------解决思路----------------------
把代码贴出来
------解决思路----------------------
图片质量压缩
[java] view plaincopyprint?
/**
* 质量压缩方法
*
* @param image
* @return
*/
public static Bitmap compressImage(Bitmap image) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
int options = 90;
while (baos.toByteArray().length / 1024 > 100) { // 循环判断如果压缩后图片是否大于100kb,大于继续压缩
baos.reset(); // 重置baos即清空baos
image.compress(Bitmap.CompressFormat.JPEG, options, baos);// 这里压缩options%,把压缩后的数据存放到baos中
options -= 10;// 每次都减少10
}
ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());// 把压缩后的数据baos存放到ByteArrayInputStream中
Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);// 把ByteArrayInputStream数据生成图片
return bitmap;
}
看看这个,这是一种方法,你可以找找其他的压缩图片的方法
------解决思路----------------------
无论加载本地图片还是网络下载图片都要注意OOM异常
做好异常处理 图片压缩 图片加载失败用另外的默认图替换 这样用户体验就比较好
想要做到像优酷这样加载大量图片不爆内存 只能慢慢研究了