1

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

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 张图片并加载到 listview 时,它会导致问题。

问题是

bitmap size exceeds VM budget

如何避免这个问题?

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

谢谢。

4

2 回答 2

1

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

  • 尝试使用 System.gc();

  • 尝试使用回收位图

  • 位图.recycle();

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

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

这一切都会对你有很大帮助,也可以通过这个链接。使用内存分析器它会帮助你找出 Deallocated 内存>试试这个链接

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) {
        }

    }

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

于 2012-05-07T10:04:03.827 回答
0

高效显示位图教程可以帮助您。

于 2012-05-07T10:02:26.983 回答