android java.lang.OutOfMemoryError:位图大小超过VM预算

时间:2011-04-07 16:40:21

标签: android sdk

我有一些泄漏问题。 我正在做的是在桌子上加载一些图片。我已经创建了一个用于加载图像的异步类。

在我的桌子上,当我骑自行车时,我添加了我的课程

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");

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

谢谢

1 个答案:

答案 0 :(得分:0)

  1. 永远不要加载任何您不需要的瓷砖。 "我正在从sdcard收集所有位图"建议你解压缩你可能需要的每一张图像,这是错误的做法。

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

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

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

  5. 基本上,您需要实现某种最近使用的(MRU)位图缓存

    提取

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