Bitmap对象回收不及时导致而内存溢出,求解?? 内存溢出bitmap图片位图 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 onPictureTaken()函数里面bitmap = BitmapFactory.decodeByteArray(data, 0,data.length); 这里试试用Bitmap.Options压缩下 我觉得你先把data.length打印出来看看。oom是解析图片出的问题,有可能是之前的图片太多没释放,也有可能解析数据本身太大。 之前打开的图片没有释放也是可能的.不过,还得觉得,应该是相机拍照的图片太大直接导致.在得到数据时,就先对图片进行压缩处理,再使用处理后的bitmap. 01-09 16:37:45.415: D/解码(28946): data.length=972705 我之所以没有先用Bitmap.Options压缩,是因为我们老板要求拍出来得照片清晰度要高。请问还有别的解决方案么 我之所以没有先用Bitmap.Options压缩,是因为我们老板要求拍出来得照片清晰度要高。请问还有别的解决方案么清晰高是追求的目标罢了,android不像ios,有很大的内在可控.现在的android手机,高清的照相机,拍出来的照片都几M一张,android的内存,开发人员也不能随便控制.本身这是android的短板.你再试试设置memoryCacheSize,把它设置大一些,但我觉得,不对图片进行压缩处理,这个问题还是不能解决,更何况,应用中图片显示和操作多的话,就更容易OOM了. 另外可以试试直接把data用inputstream保存在本地而不转为bitmap到要用的时候在适当压缩从本地读出来这样在本地保存的图片就不会被压缩 因为需求必须得先转为bitmap,因为下个界面就是图片预览与编辑 朋友问下这个memoryCacheSize的设置是哪个类里面的方法啊,弄了半天没弄出来 我之所以没有先用Bitmap.Options压缩,是因为我们老板要求拍出来得照片清晰度要高。请问还有别的解决方案么清晰高是追求的目标罢了,android不像ios,有很大的内在可控.现在的android手机,高清的照相机,拍出来的照片都几M一张,android的内存,开发人员也不能随便控制.本身这是android的短板.你再试试设置memoryCacheSize,把它设置大一些,但我觉得,不对图片进行压缩处理,这个问题还是不能解决,更何况,应用中图片显示和操作多的话,就更容易OOM了.朋友问下这个memoryCacheSize的设置是哪个类里面的方法啊,弄了半天没弄出来额,朋友,我的意思是设置内存大小,方法,不记得,你百一下,因为我正在写代码用到imageloader,所以,就写了这几个词.不过,如果你有大量图片下载或从本地读取,都可以用imageloader,它可以设置memoryCacheSize. 好的谢了,我再看看。实在不行的话,就只有用Bitmap.Options压缩下了 很遗憾经过上午的调试ImageLoader运用后,先成功的展示了手机相册里的图片,但跳往拍照界面后按下快门的瞬间 仍旧抛出了OOM。目前就只有用Bitmap.Options压缩下是试试了 很遗憾经过上午的调试ImageLoader运用后,先成功的展示了手机相册里的图片,但跳往拍照界面后按下快门的瞬间 仍旧抛出了OOM。目前就只有用Bitmap.Options压缩下是试试了那你就只有用这个了. 是的,我用这个Bitmap.Options压缩,发现清晰度变化不大,但是解决了OOM,估计是data太大了。早知道直接用就好了。 private final class TakePictureCallback implements PictureCallback { @Override public void onPictureTaken(byte[] data, Camera camera) { String sdStatus = Environment.getExternalStorageState(); if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用 Toast.makeText(PhotographActivity.this, "没有SD卡或SD卡不可用!", Toast.LENGTH_LONG).show(); return; } else { BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 2;// 图片宽高都为原来的2分之一,即图片为原来的4分之一 Log.d("解码", "data.length=" + data.length); // 解码指定字节数组中的一个不变的位图 ConfirmActivity.bitmap = BitmapFactory.decodeByteArray(data, 0, data.length, options); Log.d("解码", "1*******"); Intent starEdit = new Intent(PhotographActivity.this, ConfirmActivity.class); startActivity(starEdit); } } } 是的,我用这个Bitmap.Options压缩,发现清晰度变化不大,但是解决了OOM,估计是data太大了。早知道直接用就好了。 private final class TakePictureCallback implements PictureCallback { @Override public void onPictureTaken(byte[] data, Camera camera) { String sdStatus = Environment.getExternalStorageState(); if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用 Toast.makeText(PhotographActivity.this, "没有SD卡或SD卡不可用!", Toast.LENGTH_LONG).show(); return; } else { BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 2;// 图片宽高都为原来的2分之一,即图片为原来的4分之一 Log.d("解码", "data.length=" + data.length); // 解码指定字节数组中的一个不变的位图 ConfirmActivity.bitmap = BitmapFactory.decodeByteArray(data, 0, data.length, options); Log.d("解码", "1*******"); Intent starEdit = new Intent(PhotographActivity.this, ConfirmActivity.class); startActivity(starEdit); } } }现在的手机,拍的照片质量非常高,压缩一点,肉眼看上去不会出现明显的失真的. 怎么获取android项目assets目录里的文件写入流OutputStream 【紧急求助】这问题太无解了 哪里有android图像处理方面的讲解或源代码 求关于android, rollrock 1987 android接入点添加APN问题 手机应用软件开发技术 android4.2系统修改启动指定的launcher后,打开apk点home键无反应??? 类不能解析 Android 手机拍照无法点击确认按钮 AIDL进程间传递自定义类型参数 android切换fragment导航栏出错
bitmap = BitmapFactory.decodeByteArray(data, 0,data.length);
这里试试用Bitmap.Options压缩下
不过,还得觉得,应该是相机拍照的图片太大直接导致.
在得到数据时,就先对图片进行压缩处理,再使用处理后的bitmap.
01-09 16:37:45.415: D/解码(28946): data.length=972705
现在的android手机,高清的照相机,拍出来的照片都几M一张,android的内存,开发人员也不能随便控制.本身这是android的短板.
你再试试设置memoryCacheSize,把它设置大一些,但我觉得,不对图片进行压缩处理,这个问题还是不能解决,更何况,应用中图片显示和操作多的话,就更容易OOM了.
到要用的时候在适当压缩从本地读出来
这样在本地保存的图片就不会被压缩
因为需求必须得先转为bitmap,因为下个界面就是图片预览与编辑
朋友问下这个memoryCacheSize的设置是哪个类里面的方法啊,弄了半天没弄出来
现在的android手机,高清的照相机,拍出来的照片都几M一张,android的内存,开发人员也不能随便控制.本身这是android的短板.
你再试试设置memoryCacheSize,把它设置大一些,但我觉得,不对图片进行压缩处理,这个问题还是不能解决,更何况,应用中图片显示和操作多的话,就更容易OOM了.
朋友问下这个memoryCacheSize的设置是哪个类里面的方法啊,弄了半天没弄出来额,朋友,我的意思是设置内存大小,方法,不记得,你百一下,因为我正在写代码用到imageloader,所以,就写了这几个词.
不过,如果你有大量图片下载或从本地读取,都可以用imageloader,它可以设置memoryCacheSize.
好的谢了,我再看看。实在不行的话,就只有用Bitmap.Options压缩下了
很遗憾经过上午的调试ImageLoader运用后,先成功的展示了手机相册里的图片,但跳往拍照界面后按下快门的瞬间 仍旧抛出了OOM。目前就只有用Bitmap.Options压缩下是试试了
很遗憾经过上午的调试ImageLoader运用后,先成功的展示了手机相册里的图片,但跳往拍照界面后按下快门的瞬间 仍旧抛出了OOM。目前就只有用Bitmap.Options压缩下是试试了那你就只有用这个了.
@Override
public void onPictureTaken(byte[] data, Camera camera) {
String sdStatus = Environment.getExternalStorageState();
if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) {
// 检测sd是否可用
Toast.makeText(PhotographActivity.this, "没有SD卡或SD卡不可用!",
Toast.LENGTH_LONG).show();
return;
} else {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;// 图片宽高都为原来的2分之一,即图片为原来的4分之一
Log.d("解码", "data.length=" + data.length);
// 解码指定字节数组中的一个不变的位图
ConfirmActivity.bitmap = BitmapFactory.decodeByteArray(data, 0,
data.length, options);
Log.d("解码", "1*******");
Intent starEdit = new Intent(PhotographActivity.this,
ConfirmActivity.class);
startActivity(starEdit);
}
}
}
@Override
public void onPictureTaken(byte[] data, Camera camera) {
String sdStatus = Environment.getExternalStorageState();
if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) {
// 检测sd是否可用
Toast.makeText(PhotographActivity.this, "没有SD卡或SD卡不可用!",
Toast.LENGTH_LONG).show();
return;
} else {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;// 图片宽高都为原来的2分之一,即图片为原来的4分之一
Log.d("解码", "data.length=" + data.length);
// 解码指定字节数组中的一个不变的位图
ConfirmActivity.bitmap = BitmapFactory.decodeByteArray(data, 0,
data.length, options);
Log.d("解码", "1*******");
Intent starEdit = new Intent(PhotographActivity.this,
ConfirmActivity.class);
startActivity(starEdit);
}
}
}
现在的手机,拍的照片质量非常高,压缩一点,肉眼看上去不会出现明显的失真的.