我有一个带有空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);
我不确定哪一个更好。此外,如果有更好的方法,我会很感激反馈。
感谢。
答案 0 :(得分:1)
回收通常是要走的路。如果您不需要位图,请通过回收来了解操作系统。
除此之外,我还会使用BitmapFactory创建位图并使用选项在加载时缩小它。不要让它比设备的屏幕大。这将节省大量内存。