 <p>This problem is very complicated, so I recommend to use <code>Picasso</code>(<a href="http://square.github.io/picasso/" rel="nofollow">http://square.github.io/picasso/</a>) to handle image problems. It handles ImageView recycling and download cancelation in an adapter.</p> <p>And there is also an official guide on how to handle concurrency problems when loading images in a list: <a href="http://developer.android.com/training/displaying-bitmaps/process-bitmap.html" rel="nofollow">http://developer.android.com/training/displaying-bitmaps/process-bitmap.html</a>. This solution, which is based on <code>AsyncTask</code>, works too.</p> <p>For OOM problems, try to downsample the images before they are loaded in memory. Check this: <a href="http://developer.android.com/training/displaying-bitmaps/load-bitmap.html" rel="nofollow">http://developer.android.com/training/displaying-bitmaps/load-bitmap.html</a></p>