I am using Glide library for image loading. There is lot of images in my app so I want to clear cache once cache size is larger than 50 mb. Can someone help me to do so?
into(view); To skip the disk cache only, use DiskCacheStrategy. NONE : Glide.
What is Glide? Glide is a fast and efficient open-source media management and image loading library for Android applications. It offers an extensible resource decoding pipeline, memory and disk caching, automatic resource pooling, and an easy-to-use API to improve performance.
skipMemoryCache( true ) and then with the method, the resource will get cached in memory. Make sure you're consistent across all calls to the same resource, when you want to adjust the caching behavior! With these (. diskCacheStrategy(DiskCacheStrategy.
Call Glide.get(context).clearDiskCache() on outside the UI thread. (also consider clearMemory() too to prevent surprises after clearing disk cache) this worked for me
new Thread(new Runnable() {
@Override
public void run() {
Glide.get(MainActivity.this).clearDiskCache();
}
}).start();
There is lot of images in my app so I want to clear cache once cache size is larger than 50 mb.
in case you want to put limit 50 mb you can implement glide module
import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.os.Environment;
import android.os.StatFs;
import android.util.Log;
import com.bumptech.glide.Glide;
import com.bumptech.glide.GlideBuilder;
import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory;
import com.bumptech.glide.module.GlideModule;
import com.example.MyApplication;
import java.util.Locale;
public class LimitCacheSizeGlideModule implements GlideModule {
// Modern device should have 8GB (=7.45GiB) or more!
private static final int SMALL_INTERNAL_STORAGE_THRESHOLD_GIB = 6;
private static final int DISK_CACHE_SIZE_FOR_SMALL_INTERNAL_STORAGE_MIB = 50*1024*1024;
@Override
public void applyOptions(Context context, GlideBuilder builder) {
if (MyApplication.from(context).isTest()) return; // NOTE: StatFs will crash on robolectric.
double totalGiB = getTotalBytesOfInternalStorage() / 1024.0 / 1024.0 / 1024.0;
Log.i(String.format(Locale.US, "Internal Storage Size: %.1fGiB", totalGiB));
if (totalGiB < SMALL_INTERNAL_STORAGE_THRESHOLD_GIB) {
Log.i("Limiting image cache size to " + DISK_CACHE_SIZE_FOR_SMALL_INTERNAL_STORAGE_MIB + "MiB");
builder.setDiskCache(new InternalCacheDiskCacheFactory(context, DISK_CACHE_SIZE_FOR_SMALL_INTERNAL_STORAGE_MIB));
}
}
@Override
public void registerComponents(Context context, Glide glide) {
}
private long getTotalBytesOfInternalStorage() {
// http://stackoverflow.com/a/4595449/1474113
StatFs stat = new StatFs(Environment.getDataDirectory().getPath());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
return getTotalBytesOfInternalStorageWithStatFs(stat);
} else {
return getTotalBytesOfInternalStorageWithStatFsPreJBMR2(stat);
}
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
private long getTotalBytesOfInternalStorageWithStatFs(StatFs stat) {
return stat.getTotalBytes();
}
@SuppressWarnings("deprecation")
private long getTotalBytesOfInternalStorageWithStatFsPreJBMR2(StatFs stat) {
return (long) stat.getBlockSize() * stat.getBlockCount();
}
}
and then in your manifest add it like this
<manifest
...
<application>
<meta-data
android:name="YourPackageNameHere.LimitCacheSizeGlideModule"
android:value="GlideModule" />
...
</application>
</manifest>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With