显示图像的Android ListView导致内存不足

时间:2013-09-15 21:34:01

标签: android android-listview

好的,

我认为这是一个奇怪的问题。

我将照片加载到列表视图中作为用户滚动(这意味着如果从磁盘或在线获取,则需要一点时间并且“弹出”)

1)

我确保我一次只能在线获取一张图片+调整为1/3宽度(锁定) - 这是为了确保不是每个5个线程同时将.jpg转换为位图。 (想象一下,如果用户滚动得非常快,那么可能会发生这种情况。)

2)

磁盘上的所有图像只有1/3宽度

3)

当位图按比例放大以适应设备宽度时,我调用回收并在 getView 中使用时将位图设置为null。 (我正在将位图转换为 BitmapDrawable 对象,其中listitem imageview setImageDrawable 调用中使用)

4)

我在 getView 中重复使用视图,如果不是null

5)

我加载这样的位图:

BitmapFactory.Options o = new BitmapFactory.Options();   
o.inPurgeable = false; // I do not use this since I resize/scale down images myself later
o.inInputShareable = false;
o.inPreferredConfig = Config.RGB_565;
res.bitmap = BitmapFactory.decodeStream(is, null, o);

6)

我也清理废品

public void onMovedToScrapHeap(View view) {
          final TextView description = (TextView)view.findViewById(R.id.listitem_news_content);
          description.setText("");
          final ImageView image = (ImageView)view.findViewById(R.id.listitem_news_image);
          image.setImageBitmap(null);                                            
        }

我正在测试三星Galaxy II。你们对我还能尝试什么有什么想法吗?由于我只需要显示10个项目,我认为它应该是可能的......

2 个答案:

答案 0 :(得分:2)

尝试使用广泛使用的库Universal Image Loader https://github.com/nostra13/Android-Universal-Image-Loader

简单直接,您永远不必关心自己解码图像。

选项二:Square http://square.github.io/picasso/

团队提供了一个强大的用于加载图片的新API

答案 1 :(得分:1)

试试这个,在OutOfMemory的情况下它适用于我...使用System.gc()

bitmap = null;
imageView.setImageBitmap(null);
System.gc();