gpt4 book ai didi

java 内存不足错误 : bitmap size exceeds VM budget

转载 作者:行者123 更新时间:2023-12-01 05:37:08 24 4
gpt4 key购买 nike

我的 ImageActivity 上有 ImageView 和一个按钮。单击该按钮时,会列出可用的图像,单击其中一张图像时,会将其加载到 ImageView 中。

ImageView XML:

   <ImageView
android:id="@+id/imageView"
android:layout_width="300dip"
android:layout_height="300dip"
android:src="@android:drawable/alert_light_frame"
/>

请看代码:

public class ImageActivity extends Activity {

private static final int SELECT_PICTURE = 1;
private String selectedImagePath;
private ImageView imageView;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.comments_detail);

imageView = (ImageView) findViewById(R.id.imageView);

((Button) findViewById(R.id.BtnBrowse))
.setOnClickListener(new OnClickListener()
{
public void onClick(View arg0)
{
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select Picture"), SELECT_PICTURE);
}
});
}

public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode == RESULT_OK)
{
if (requestCode == SELECT_PICTURE)
{
Uri selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
//System.out.println("Image Path : " + selectedImagePath);
imageView.setImageURI(selectedImageUri);
}
}
}

public String getPath(Uri uri)
{
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}


}

问题:问题是,当我单击按钮时,会显示可用图像,我选择其中一张图像并将其加载到 ImageView 中,当我重复这些步骤几次时,应用程序会抛出异常抛出异常:java.lang.OutOfMemoryError:位图大小超出VM预算

我仔细观察了一下,发现这个问题是由于内存泄漏造成的,但我无法找到我的代码有什么问题。有人可以花一些宝贵的时间来帮助我吗?

谢谢。

最佳答案

如果您执行一系列setImageURI,则会将一系列位图加载到 View 中。如果您收到java.lang.OutOfMemoryError:位图大小超出VM预算异常,则意味着imageView在您加载新位图时不会回收以前的位图。所以你

  • 需要鼓励 imageView 回收以前的位图 - 可能使用 setImageView("")
  • 或者从 URI 获取位图并使用 setImageBitmap(android.graphics.Bitmap) 代替;那么你可以执行setImageBitmap(null)bitmap.recycle()

关于java 内存不足错误 : bitmap size exceeds VM budget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8000219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com