【发布时间】:2011-08-02 04:39:59
【问题描述】:
我有一个带有空 ImageView 和一个按钮的活动。单击按钮后,我显示设备的媒体库,用户选择通过意图传递给活动的图像。我使用返回数据中的图像 URI 并填充 ImageView,如下所示:
private ImageView pic;
@Override
public void onCreate(Bundle savedInstanceState)
{
pic = (ImageView)findViewById(R.id.bbChildImage);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(resultCode == RESULT_OK)
{
URI currImageURI = data.getData();
pic.setImageURI(currImageURI);
}
}
现在,如果我从图库中选择另一个图像,在返回数据后,我会得到一个与位图相关的 OutOfMemory 异常。
我想出了两种方法来摆脱它。我要么在分配 URI 之前这样做:
((BitmapDrawable)pic.getDrawable()).getBitmap().recycle();
或者我不是将 URI 分配给视图,而是先检索位图,然后分配它,如下所示:
Bitmap thumbnail = MediaStore.Images.Media.getBitmap(this.getContentResolver(), currImageURI);
pic.setImageBitmap(thumbnail);
我不确定哪个更好。另外,如果有更好的方法,我将不胜感激。
谢谢。
【问题讨论】:
-
这是设备相机拍摄的图像大小,因此可能在 1 到 3 兆之间,具体取决于设备。
-
你的第一种方法更好
-
@ingsaurabh,你能解释一下原因吗?
-
因为在第二种方法中你没有释放内存,所以迟早你会再次得到 OOM 它总是一个好主意,一旦你完成了回收位图以获取更多信息,请查看@987654321 @
标签: android bitmap imageview uri out-of-memory