Glide,当缓存大小大于 50 MB 时清除缓存
Glide, Clear cache when cache size is larger than 50 mb
我正在使用 Glide 库加载图像。我的应用程序中有很多图像,所以一旦缓存大小大于 50 mb,我想清除缓存。
有人可以帮我这样做吗?
在 UI 线程外调用 Glide.get(context).clearDiskCache()。 (也考虑 clearMemory() 以防止清除磁盘缓存后出现意外)这对我有用
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.
如果你想限制 50 MB,你可以实现 glide 模块
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() {
//
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();
}
}
然后在您的清单中像这样添加它
<manifest
...
<application>
<meta-data
android:name="YourPackageNameHere.LimitCacheSizeGlideModule"
android:value="GlideModule" />
...
</application>
</manifest>
我正在使用 Glide 库加载图像。我的应用程序中有很多图像,所以一旦缓存大小大于 50 mb,我想清除缓存。 有人可以帮我这样做吗?
在 UI 线程外调用 Glide.get(context).clearDiskCache()。 (也考虑 clearMemory() 以防止清除磁盘缓存后出现意外)这对我有用
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.
如果你想限制 50 MB,你可以实现 glide 模块
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() {
//
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();
}
}
然后在您的清单中像这样添加它
<manifest
...
<application>
<meta-data
android:name="YourPackageNameHere.LimitCacheSizeGlideModule"
android:value="GlideModule" />
...
</application>
</manifest>