Remove image from cache in Glide library Remove image from cache in Glide library android android

Remove image from cache in Glide library


This is how I solved this problem.

Method 1: When the URL changes whenever image changes

Glide.with(DemoActivity.this)    .load(Uri.parse("file://" + imagePath))    .diskCacheStrategy(DiskCacheStrategy.NONE)    .skipMemoryCache(true)    .into(mImage);

diskCacheStrategy() can be used to handle the disk cache and you can skip the memory cache using skipMemoryCache() method.

Method 2: When URL doesn't change, however, image changes

If your URL remains constant then you need to use Signature for image cache.

Glide.with(yourFragment)     .load(yourFileDataModel)     .signature(new StringSignature(yourVersionMetadata))     .into(yourImageView);

Glide signature() offers you the capability to mix additional data with the cache key.

  • You can use MediaStoreSignature if you are fetching content from media store. MediaStoreSignature allows you to mix the date modified time, mime type, and orientation of a media store item into the cache key. These three attributes reliably catch edits and updates allowing you to cache media store thumbs.
  • You may StringSignature as well for content saved as Files to mix the file date modified time.


As explained in the section Caching and Cache Invalidation of the Glide wiki:

Because File names are hashed keys, there is no good way to simplydelete all of the cached files on disk that correspond to a particularurl or file path. The problem would be simpler if you were only everallowed to load or cache the original image, but since Glide alsocaches thumbnails and provides various transformations, each of whichwill result in a new File in the cache, tracking down and deletingevery cached version of an image is difficult.

In practice, the best way to invalidate a cache file is to change your >identifier when the content changes (url, uri, file path etc).

Since you can't change the file path, Glide offers the signature() API that allows you sets some additional data to be mixed in to the memory and disk cache keys allowing the caller more control over when cached data is invalidated.

If you want to reload every time the image from the disk, you can change your code like this:

Glide.with(DemoActivity.this)     .load(Uri.parse("file://" + imagePath))     .signature(new StringSignature(String.valueOf(System.currentTimeMillis())))     .into(mImage);


There are two ways to handle Glide cache refresh,

Firstway: - Add below with glide implementation

.diskCacheStrategy(DiskCacheStrategy.NONE).skipMemoryCache(true)

Second way:

If you able to identify image changes then give your new file name in below,

.signature(new StringSignature(String.valueOf(fileName)))

or you want to load every time with latest images , use below

.signature(new StringSignature(String.valueOf(System.currentTimeMillis())))

Hope this helps.