好的,
我认为这是一个奇怪的问题。
我将照片加载到列表视图中作为用户滚动(这意味着如果从磁盘或在线获取,则需要一点时间并且“弹出”)
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个项目,我认为它应该是可能的......
答案 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();