2011-04-07 79 views
1

我一些泄漏问题。 我在做什么是装在一个表中的一些图片。我创建了一个用于加载图像的异步类。机器人java.lang.OutOfMemoryError:位图大小超过VM预算

在我的表而我骑自行车的阵列添加我的类

final LoaderImageView image = new LoaderImageView(getContext(),vgood[i].getImageUrl(),(int)(ratio *80),(int)(ratio *80)); 
row.addView(image); 

在我asyncronous类我是来自这个

return Drawable.createFromStream(((java.io.InputStream)new java.net.URL(url).getContent()), "name"); 

调用加载图像通过

public void setImageDrawable(final String imageUrl) { 
    mDrawable = null; 
    mSpinner.setVisibility(View.VISIBLE); 
    mImage.setVisibility(View.GONE); 
    new Thread(){ 
     public void run() { 
      try { 
       mDrawable = getDrawableFromUrl(imageUrl); 
       imageLoadedHandler.sendEmptyMessage(COMPLETE); 
      } catch (MalformedURLException e) { 
       imageLoadedHandler.sendEmptyMessage(FAILED); 
       e.printStackTrace(); 
      } catch (IOException e) { 
       imageLoadedHandler.sendEmptyMessage(FAILED); 
       e.printStackTrace(); 
      } 
     }; 
    }.start(); 
} 

当我有很多图像加载应用程序崩溃,由于这条线造成的内存不足

return Drawable.createFromStream(((java.io.InputStream)new java.net.URL(url).getContent()), "name"); 

我该如何解决呢?我哪里错了?

谢谢

+0

你确定他们不只是*太多* 图片? – bigstones 2011-04-07 17:06:16

+0

嗯..它可能是可能的,有一个关于限制? – Ste 2011-04-08 06:50:18

+0

如果我还记得,堆内存是16MB的手机(以及在模拟器默认)。无论如何,这里有很多关于这个错误的问题,所以一定要检查它们。 – bigstones 2011-04-08 11:37:17

回答

0
  1. 从来没有加载,你不需要任何瓷砖。 “我正在从SD卡收集所有位图”表明你正在解压每一张你可能需要的图像,这是错误的方法。

  2. 使用较小的瓷砖。 256x256是一个很好的尺寸。

  3. 将它们加载为Config.RGB565(即16bpp)。

  4. 定期回收()您不需要的位图。

基本上你需要实现某种-最近最常使用(MRU)位图缓存

萃取从

Android: "java-lang-outofmemoryerror-bitmap-size-exceeds-vm-budget-android" While loading bitmaps from sdcard?

相关问题