I would suggest using an existing library, such as Picasso (by Square) or Volley (by Google).
Picasso is especially easy to implement and will work excellently for your purpose, and is as easy as:
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
You won't have to concern yourself with AsyncTasks or AsyncTaskLoaders as the library takes all of this out of your hands, caching both images in memory and on the disk.
If you insist on building your own solution, I suggest looking around for related questions as there are many things to bear in mind:
- AsyncTasks may be ill fitted as they are directly coupled with a single activity; you'll need a Loader or a mechanism similar to Loaders to deliver results to whichever activity wants an image.
- On older devices, bitmaps reside in a special region of memory that isn't managed by the GC; you'll have to dispose of bitmaps manually when you're done with them.
- Bitmaps use a significant amount of memory and need to be carefully managed to avoid OOMEs, such as downsampling them when loading and storing in memory inside an LruCache.
- Beware of managing the size of the image cache directory when writing images to disk.