Android 错误 : java. lang.OutOfMemoryError: bitmap size exceeds VM budget

标签 android android-imageview android-image android-memory

我在 stackoverflow 中遇到了很多关于这个错误的问题,但没有一个问题找到了适合我的场景的解释。

在我的 android 应用程序中,我必须允许用户单击一个按钮来打开图库并选择图像。然后需要将该特定的选定图像加载到我的布局 (UI) 中的 ImageView。

这样做很好。以下是我用来实现此目的的代码。

在上传按钮中点击 ->

        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent,"Select Picture"), REQUEST_UPLOAD_IMG);

然后是onActivityResult ->

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{       
    //super.onActivityResult(requestCode, resultCode, data);        
    if(resultCode == Activity.RESULT_OK)
    {
        if(requestCode==REQUEST_UPLOAD_IMG)
        {               
            Uri selectedImageURI = data.getData();
            uploadImgVW.setImageURI(selectedImageURI);              
        }
        else
        {
            Toast.makeText(MainActivity.this, "You can only select an Image.", Toast.LENGTH_LONG).show();
        }
    }
}

但是如果用户选择更大尺寸的图像(例如 2MB 的尺寸),应用程序会退出并出现以下错误。但是对于普通(KB 级)图像来说很好,想知道我能为这个问题做些什么(处理这种错误情况)。谢谢...

错误->

06-20 16:43:58.445: E/AndroidRuntime(2075): FATAL EXCEPTION: main
06-20 16:43:58.445: E/AndroidRuntime(2075): java.lang.OutOfMemoryError: bitmap size exceeds VM budget

最佳答案

有一系列文章描述how to manage the bitmaps有效率的。查看您的代码,您在不知道有多大的情况下加载图像,您最终将面临这些问题,尤其是当您加载和处理许多图像时。

one of those articles 中描述的想法是加载一个已经按比例缩小的位图(首先检查要加载的图像有多大,然后计算缩小比例,然后才加载按比例缩小的图像)。为此,您需要先了解 ImageView 的尺寸,然后您必须使用 BitmapFactory.decode(...)因为您有一个要显示的目标文件的 Uri。文件的 URI 应该是微不足道的。

此外,您还需要检查应用程序的内存消耗……您可能还有其他资源卡在内存中,您需要清理它们。我正在使用一个非常有用的工具 - MAT .关于这个的一篇很好的文章be found here .作者 Patrick Dubroy 在 Google IO 2011 上就此主题举行了一次非常有趣的 session 。 Check that out ,对我来说很有帮助......

关于Android 错误 : java. lang.OutOfMemoryError: bitmap size exceeds VM budget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17236303/

相关文章:

Java - Android - ZIP 文件不断带回 println 需要消息错误

java - 删除空数据时出现 nullpointerException 错误

android - 如何创建具有缩放和平移功能的 ImageView ?

android - RelativeLayout 中的空白区域

android - Res 文件夹中的 Logo 不会在 Android 的新运行中更新

java - 单击进度对话框按钮后如何关闭 Activity

android - 带有实心圆的自定义圆形进度条

android - 如何覆盖 Android 库项目中定义的可绘制对象?

android - 更改按钮内的可绘制大小

android BitmapFactory 总是返回 0