2011-06-03 60 views
0

我从url加载图像。它没问题,但是当很长一段时间它错误outofmemory:位图大小超过vm预算。这里我的代码从URL加载图像到位图时的OutOfMemory

BitmapFactory.Options bmOptions; 
    bmOptions = new BitmapFactory.Options(); 
    bmOptions.inJustDecodeBounds = true; 
    //from web 
    try { 
     Bitmap bitmap=null; 
     InputStream is=new URL(url).openStream(); 
     BitmapFactory.decodeStream(is, null, bmOptions); 
     is.close(); 
     BitmapFactory.Options o2 = new BitmapFactory.Options(); 
     o2.inSampleSize = 1; 
     is = new URL(url).openStream(); 
     bitmap = BitmapFactory.decodeStream(is, null, o2); 
     is.close(); 
     return bitmap; 
    } catch (Exception ex){ 
     ex.printStackTrace(); 
     return null; 
    } 

请帮助我!

+0

哪条线会出错? – user496854 2011-06-03 07:15:33

+0

图像有多大?检查出这个问题以及http://stackoverflow.com/questions/2928002/outofmemoryerror-bitmap-size-exceeds-vm-budget-android – 2011-06-03 07:17:36

+0

我加载大图像 – 2011-06-03 08:22:02

回答

2

尝试使用BitmapFactory.Options的sampleSize,这将减少图像存储器的大小(和质量)

关闭输入流

但是,如果你的图像真的太大了,我认为那里没有奇迹的解决方案,图像太大了...

+0

我用simpleSize图像造成图像很大 – 2011-06-03 07:53:02

+0

对不起,我错过了^^'。但我认为1的值不会改变任何内容,“如果设置为大于1的值,请求解码器对原始图像进行二次采样,返回一个较小的图像以节省内存。” (来自Android的参考) – Jokahero 2011-06-03 07:56:58

+0

我的应用程序加载图像从URL显示图像,图像很大。在列表视图中,我使用simplesize,但在imageview中,如果我使用ismplesize> 1,则将图像缩小。 – 2011-06-03 08:08:08

1

您的问题与错误消息中提到的一样:您的图像太大而无法加载到内存中。

0

尝试使用任何其他图像。由于这个图像优于你的文件夹的大小。

使用模拟器来测试它吗?

+0

没有我使用nexus的测试 我加载图像好每图像,但当 – 2011-06-03 07:18:32

+0

没有我使用nexus s测试它。 – 2011-06-03 07:19:27

0

只是一个想法,它可能是这段代码有时会引发异常。这将导致InputStream不会释放已签名的资源(内存泄漏)。

如果你在一个finaly块这个问题应该得到解决

+0

我会试一试。谢谢 – 2011-06-03 07:30:32

+0

我试了一下,但不好,它仍然出现内存不足的情况 – 2011-06-03 07:56:25