您的位置:首页 > 移动开发 > Android开发

【Android】Bitmap加载图片错误 java.lang.OutOfMemoryError: bitmap size exceeds VM budget

2013-07-11 22:13 716 查看
今天测试程序的时候出现下面的错误日志信息,程序当场挂掉
07-09 14:11:25.434: W/System.err(4890):     java.lang.OutOfMemoryError: bitmap size exceeds VM budget
07-09 14:11:25.435: W/System.err(4890):     at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
07-09 14:11:25.435: W/System.err(4890):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:511)
07-09 14:11:25.435: W/System.err(4890):     at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:325)
07-09 14:11:25.435: W/System.err(4890):     at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:350)
使用Bitmap加载图片的方法是这样的
     vipAvatar = (ImageView) findViewById(R.id.vip_avatar);
        File file = new File(Environment.getExternalStorageDirectory()
                + IMAGE_FILE_NAME);
        if (file.exists()) {
           Bitmap bitmap = BitmapFactory.decodeFile(Environment
                    .getExternalStorageDirectory() + IMAGE_FILE_NAME);
            Drawable drawable = new BitmapDrawable(bitmap);
            vipAvatar.setImageDrawable(drawable);
        }
在使用BitmapFactory.decodeFile的时候出错了,查找原因
android系统限制,只给图片分配8兆的内存,超过就崩,你图片几十KB,可能是压缩格式的,转换成bitmap就是本来的大小。
增加VM的设置不太现实,如果是在模拟器上没问题,但是考虑到真机使用,问题还是要解决的。
这里使用了一种方法,上述情况没有出现,方法是
在退出Activity时,将bitmap回收
  @Override
    protected void onDestroy() {
        if (bitmap != null && !bitmap.isRecycled())
            bitmap.recycle();
        super.onDestroy();
    }

//////////////////////////////////////////////
原创声明 转载请注明
本文出自 Ray-Ray的博客
文章地址 http://www.cnblogs.com/rayray/p/3180017.html
感谢大家的推荐和收藏
你的支持! 我们的动力!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐