为什么无法将多个图像加载到列表视图中?

时间:2012-05-07 09:45:34

标签: android bitmap imageview

我正在从网站下载图片并附加到列表视图中。

URL aURL;
        try {
                aURL = new URL(//"http://www.orientaldaily.com.my/"+
                        imagepath[i]);
                URLConnection conn = aURL.openConnection();
                conn.connect();
                InputStream is = conn.getInputStream();
                BufferedInputStream bis = new BufferedInputStream(is);
                Bitmap bm = BitmapFactory.decodeStream(bis);
                bis.close();
                is.close();

                imageview = (ImageView) findViewById(R.id.image_alllatestnewstitle);
                imageview.setVisibility(View.VISIBLE);
                imageview.setScaleType(ScaleType.CENTER_CROP);
                imageview.setImageBitmap(bm);
            } catch (IOException e) {
                Log.e("DEBUGTAG", "Remote Image Exception", e);
            }

当我只下载1张图片时,它没有问题,但是当我下载多张或超过5张图片并加载到列表视图中时,会导致问题。

问题是

bitmap size exceeds VM budget

如何避免这个问题?

注意:这不是重复的任何问题!

感谢。

2 个答案:

答案 0 :(得分:1)

加载很多图像导致应用内存耗尽并强行关闭。我认为这是你的应用程序发生的事情。内存问题是android在开发应用程序时的一个复杂问题。这可以通过手动清除未使用的位图和使用垃圾收集器。

  • 尝试使用System.gc();

  • 尝试使用

  • 回收位图
  • Bitmap.recycle();

  • 使所有未使用的位图为空。

  • 释放所有未使用的内存。

这一切都会对你有所帮助,也可以通过这个link。使用内存分析器,它会帮助你发现解除分配的内存>试试这个link

public void deAllocateAllMemory() 
{
    try 
    {


        mGallery.imgLoader1.disposeImages();
        unbindDrawables(findViewById(R.id.magazineGrid));
        mGallery=null;  

        back.getBackground().setCallback(null);
        back.setOnClickListener(null);
        store.getBackground().setCallback(null);
        store.setOnClickListener(null);
        quickAction.setOnActionItemClickListener(null);
        settings.getBackground().setCallback(null);
        settings.setOnClickListener(null);
    }
    catch (Exception e) 
    {
    }

}

private void unbindDrawables(View view) {
    if (view.getBackground() != null) {
        try {
            view.getBackground().setCallback(null);
            ((BitmapDrawable) view.getBackground()).getBitmap().recycle();
            view.destroyDrawingCache();
            view.notifyAll();
        } catch (Exception e) {
        }

    }

这段代码可能对你有所帮助。

答案 1 :(得分:0)

Displaying Bitmaps Efficiently教程可以帮助您。