There are several solutions that you can use, it depends on what you need.
If you want to cache images on L1 (ram) you can use the SDKs LRUCache (or from the support v4) and easily set it up as BitmapLruCache. If you need to cache images on both L1 and L2 (disk) you can use "2 level LRU cache" solutions on GitHub (such as wuman/TwoLevelLruCache and such).
If you need caching as part of an image loading library you can check out one of the following: (they all have L1/L2 caches)
** Picasso (by Square):
It's simple and and easy to use.
http://square.github.io/picasso/
** Glide
Has the same API as Picasso but contains some enhancements (such as animated GIF support)
https://github.com/bumptech/glide
** Fresco (by Facebook):
This thing is a bad ass machine, pretty simple to use but contains really impressive set of capabilities. Wouldn't use it for a simple.
https://code.facebook.com/posts/366199913563917/introducing-fresco-a-new-image-library-for-android/
(github: https://github.com/facebook/fresco)
you can also see some comparisons here:
Picasso v/s Imageloader v/s Fresco vs Glide
http://vardhan-justlikethat.blogspot.co.il/2014/09/android-image-loading-libraries-picasso.html
Cheers!