Ⅰ android加载大图片的时候如何防止内存溢出
【答案】:android系统给图片分配的内存只有8M,当加载大量图片时往往会出现OOM。
Android加载大量图片内存溢出解决方案:
1)尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存,可以通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的 source
2)使用BitmapFactory.Options对图片进行压缩
InputStream is = this.getResources().openRawResource(R.drawable.pic1);
BitmapFactory.Options ptions=new BitmapFactory.Options();
options.inJustDecodeBounds = false;
options.inSampleSize = 10; //width,hight设为原来的十分一
Bitmap btp =BitmapFactory.decodeStream(is,null,options);
3)运用Java软引用,进行图片缓存,将需要经常加载的图片放进缓存里,避免反复加载
及时销毁不再使用的Bitmap对象
if(!bmp.isRecycle() ){
bmp.recycle() //回收图片所占的内存
system.gc() //提醒系统及时回收
}
Ⅱ android开发,上传图片时,怎样自动压缩成800x600的尺寸求指教~~
protected Bitmap scaleImg(Bitmap bm, int newWidth, int newHeight) {
// 图森蚂纤片源
// Bitmap bm = BitmapFactory.decodeStream(getResources()
// .openRawResource(id));
// 获得图片的宽高
int width = bm.getWidth();
int height = bm.getHeight();
// 设置想要的物贺大小
int newWidth1 = newWidth;
int newHeight1 = newHeight;
// 计算缩放比此仿例
float scaleWidth = ((float) newWidth1) / width;
float scaleHeight = ((float) newHeight1) / height;
// 取得想要缩放的matrix参数
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
// 得到新的图片
Bitmap newbm = Bitmap.createBitmap(bm, 0, 0, width, height, matrix,
true);
return newbm;
}
你可以试下,如果不行,建议你还是先压缩在上传。
Ⅲ 性能优化:Android中Bitmap内存大小优化的几种常见方式
在Android中,优化Bitmap内存大小的常见方式有以下几种:
采样率压缩:
矩阵压缩:
更改配置:
质量压缩:
在实际开发中,应根据具体需求选择合适的优化策略,以提升应用的性能和响应速度,并有效避免内存溢出问题。
Ⅳ 性能优化:Android中Bitmap内存大小优化的几种常见方式
Android中优化Bitmap内存大小是提升应用性能的关键步骤。Bitmap占用内存大小的计算遵循其配置(Bitmap.Config)和大小。默认配置下,每个像素占用4字节。因此,优化主要通过调整宽度、高度或配置来减少内存消耗。
优化策略包括:
1. **采样率压缩**:通过改变采样率来缩小Bitmap大小,以此降低内存需求。例如,将原图大小从640px * 360px缩小至1/4,内存占用相应减少至原来的1/16。该方法适用于原有图片宽高过大、目标尺寸较小的情况,避免了不必要的内存浪费。
2. **矩阵压缩**:使用Bitmap.createBitmap或Bitmap.createScaledBitmap方法进行缩放。设定缩放比例后,内存占用减少至原图的1/100。适用于原图大小和目标Bitmap尺寸已知的情况。
3. **更改配置**:将默认的Bitmap.Config.ARGB_8888改为占用字节更少的配置,如ARGB_4444或RGB_565。对于非透明度要求高的图像,使用RGB_565更为合适。此方法适用于对图像分辨率要求不高的场景。
4. **质量压缩**:通过Bitmap.compress方法调整quality参数来减小生成的字节流大小,而不影响Bitmap内存占用。此方法在保持图像质量的同时,减小了图像的位深、透明度等,适用于需要传递二进制图片数据的场景,如微信分享。
在实际开发中,应根据具体需求选择合适的优化策略。优化Bitmap内存大小不仅能够提升应用的性能和响应速度,还能有效避免内存溢出问题。