我正在从图库中选择一张图片,并将其显示在ImageView中。然而,当我运行它时,我可以看到大量(高达60MB)的堆增长。
以下是代码:
else if(requestCode == PICK_IMAGE && resultCode == RESULT_OK){
Uri selectedImage = data.getData();
try {
img = (Bitmap)MediaStore.Images.Media.getBitmap(
this.getContentResolver(),
selectedImage);
} catch (FileNotFoundException e) {
Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show();
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ImgContainer.setImageBitmap(img);
img.compress(Bitmap.CompressFormat.PNG, 100, boas);
byteArray = boas.toByteArray();
try {
boas.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
所有变量都已在课程开始时正确初始化,因此这不是问题。
感谢您的时间和帮助。
答案 0 :(得分:0)
img = (Bitmap)MediaStore.Images.Media.getBitmap(
this.getContentResolver(),
selectedImage);
每次创建新对象并将其分配给img。 改变它可能会有效。
编辑:
//这可以是你的单身类
public class ImageHelper {
private static ImageHelper imageHelper;
private Bitmap imageBitmap;
private ImageHelper() {
imageBitmap = //source of ur image
}
public static ImageHelper getInstance() {
if(imageHelper==null) {
imageHelper = new ImageHelper();
}
return imageHelper;
}
public Bitmap getImage() {
return this.imageBitmap;
}
}
通过这样做,你将只有1个ImageHelper对象,它只能保存1个图像副本。
如果你有不同的点来设置图像,就像你从画廊中挑选一样,
你可以有一个setter方法或者这个,
public void setImage(Bitmap image) {
this.imageBitmap = image;
}
你可以称之为
ImageHelper.getInstance().setImage(image);
无论你想在哪里使用它,你都可以通过
来实现ImageHelper.getInstance().getImage();