下面列出了怎么用com.bumptech.glide.load.engine.cache.DiskLruCacheWrapper的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
public void applyOptions(final Context context, GlideBuilder builder) {
builder.setDiskCache(new DiskCache.Factory() {
@Override
public DiskCache build() {
// Careful: the external cache directory doesn't enforce permissions
return DiskLruCacheWrapper
.create(FileUtils.makeDirs(new File(Utils.getAppComponent().cacheFile(), "Glide")),
IMAGE_DISK_CACHE_MAX_SIZE);
}
});
MemorySizeCalculator calculator = new MemorySizeCalculator.Builder(context).build();
int defaultMemoryCacheSize = calculator.getMemoryCacheSize();
int defaultBitmapPoolSize = calculator.getBitmapPoolSize();
int customMemoryCacheSize = (int) (1.2 * defaultMemoryCacheSize);
int customBitmapPoolSize = (int) (1.2 * defaultBitmapPoolSize);
builder.setMemoryCache(new LruResourceCache(customMemoryCacheSize));
builder.setBitmapPool(new LruBitmapPool(customBitmapPoolSize));
}
@Override
public void applyOptions(Context context, GlideBuilder builder) {
builder.setDiskCache(new DiskCache.Factory() {
@Override
public DiskCache build() {
File pathIcons = new File(Configuration.PATH_CACHE_ICONS);
pathIcons.mkdirs();
return DiskLruCacheWrapper.get(pathIcons, DEFAULT_DISK_CACHE_SIZE);
}
});
final MemorySizeCalculator calculator = new MemorySizeCalculator(context);
final int defaultMemoryCacheSize = calculator.getMemoryCacheSize();
builder.setMemoryCache(new LruResourceCache(defaultMemoryCacheSize / 2));
final int defaultBitmapPoolSize = calculator.getBitmapPoolSize();
builder.setBitmapPool(new LruBitmapPool(defaultBitmapPoolSize / 2));
}
public static void init(final Context context) {
OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setReadTimeout(30, TimeUnit.SECONDS);
okHttpClient.setConnectTimeout(30, TimeUnit.SECONDS);
// okHttpClient.setProtocols(Arrays.asList(Protocol.HTTP_1_1));
GlideBuilder glideBuilder = new GlideBuilder(context)
.setDiskCache(new DiskCache.Factory() {
@Override
public DiskCache build() {
// Careful: the external cache directory doesn't enforce permissions
File cacheLocation = new File(context.getExternalCacheDir(), AppConfig.CACHE_IMAGE_DIR);
cacheLocation.mkdirs();
return DiskLruCacheWrapper.get(cacheLocation, 100 * 1024 * 1024);
}
});
if (!Glide.isSetup()) {
Glide.setup(glideBuilder);
}
Glide.get(context).register(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(okHttpClient));
}
@Override
public void applyOptions(final Context context, GlideBuilder builder) {
builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);// Bitmap格式转换到ARGB_8888
//内存缓存
MemorySizeCalculator memorySizeCalculator = new MemorySizeCalculator(context);
int defaultMemoryCacheSize = memorySizeCalculator.getMemoryCacheSize();
int defalutBitmapPoolSize = memorySizeCalculator.getBitmapPoolSize();
builder.setMemoryCache(new LruResourceCache((int) (defalutBitmapPoolSize * 1.2)));//内部
builder.setBitmapPool(new LruBitmapPool((int) (defalutBitmapPoolSize * 1.2)));
//磁盘缓存
builder.setDiskCache(new InternalCacheDiskCacheFactory(context, 1024 * 1024 * 10));//内部磁盘缓存
builder.setDiskCache(new ExternalCacheDiskCacheFactory(context, 10 * 1024 * 1024));//磁盘缓存到外部存储
//指定缓存目录1
String downLoadPath = Environment.getDownloadCacheDirectory().getPath();
builder.setDiskCache(new DiskLruCacheFactory(downLoadPath, defaultMemoryCacheSize));
//指定缓存目录2
builder.setDiskCache(new DiskCache.Factory() {
@Override
public DiskCache build() {
File cacheLocation = new File(FileUtils.getCacheDir(context), "GlideCache");
return DiskLruCacheWrapper.get(cacheLocation, 1024 * 1024 * 10);
}
});
}
@Override
public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
final AppComponent appComponent = ArmsUtils.obtainAppComponentFromContext(context);
builder.setDiskCache(() -> {
// Careful: the external cache directory doesn't enforce permissions
return DiskLruCacheWrapper.create(DataHelper.makeDirs(new File(appComponent.cacheFile(), "Glide")), IMAGE_DISK_CACHE_MAX_SIZE);
});
MemorySizeCalculator calculator = new MemorySizeCalculator.Builder(context).build();
int defaultMemoryCacheSize = calculator.getMemoryCacheSize();
int defaultBitmapPoolSize = calculator.getBitmapPoolSize();
int customMemoryCacheSize = (int) (1.2 * defaultMemoryCacheSize);
int customBitmapPoolSize = (int) (1.2 * defaultBitmapPoolSize);
builder.setMemoryCache(new LruResourceCache(customMemoryCacheSize));
builder.setBitmapPool(new LruBitmapPool(customBitmapPoolSize));
//将配置 Glide 的机会转交给 GlideImageLoaderStrategy,如你觉得框架提供的 GlideImageLoaderStrategy
//并不能满足自己的需求,想自定义 BaseImageLoaderStrategy,那请你最好实现 GlideAppliesOptions
//因为只有成为 GlideAppliesOptions 的实现类,这里才能调用 applyGlideOptions(),让你具有配置 Glide 的权利
BaseImageLoaderStrategy loadImgStrategy = appComponent.imageLoader().getLoadImgStrategy();
if (loadImgStrategy instanceof GlideAppliesOptions) {
((GlideAppliesOptions) loadImgStrategy).applyGlideOptions(context, builder);
}
}
@Override
public void applyOptions(Context context, GlideBuilder builder) {
builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
File cacheDir = new File(context.getCacheDir(), DiskCache.Factory.DEFAULT_DISK_CACHE_DIR);
cache = DiskLruCacheWrapper.get(cacheDir, DiskCache.Factory.DEFAULT_DISK_CACHE_SIZE);
builder.setDiskCache(new DiskCache.Factory() {
@Override
public DiskCache build() {
return cache;
}
});
}
@SuppressWarnings("ResultOfMethodCallIgnored")
@Override
public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
// 读写外部缓存目录不需要申请存储权限
File diskCacheFile = new File(context.getCacheDir(), "glide");
// 如果这个路径是一个文件
if (diskCacheFile.exists() && diskCacheFile.isFile()) {
// 执行删除操作
diskCacheFile.delete();
}
// 如果这个路径不存在
if (!diskCacheFile.exists()) {
// 创建多级目录
diskCacheFile.mkdirs();
}
builder.setDiskCache(() -> DiskLruCacheWrapper.create(diskCacheFile, IMAGE_DISK_CACHE_MAX_SIZE));
MemorySizeCalculator calculator = new MemorySizeCalculator.Builder(context).build();
int defaultMemoryCacheSize = calculator.getMemoryCacheSize();
int defaultBitmapPoolSize = calculator.getBitmapPoolSize();
int customMemoryCacheSize = (int) (1.2 * defaultMemoryCacheSize);
int customBitmapPoolSize = (int) (1.2 * defaultBitmapPoolSize);
builder.setMemoryCache(new LruResourceCache(customMemoryCacheSize));
builder.setBitmapPool(new LruBitmapPool(customBitmapPoolSize));
// 设置默认的加载占位图和加载出错图
builder.setDefaultRequestOptions(new RequestOptions().placeholder(R.drawable.image_loading).error(R.drawable.image_load_err));
}
@Override
public void applyOptions(Context context, GlideBuilder builder) {
AppComponent appComponent = ArmsUtils.obtainAppComponentFromContext(context);
builder.setDiskCache(new DiskCache.Factory() {
@Override
public DiskCache build() {
// Careful: the external cache directory doesn't enforce permissions
return DiskLruCacheWrapper.get(DataHelper.makeDirs(new File(appComponent.cacheFile(), "Glide")), IMAGE_DISK_CACHE_MAX_SIZE);
}
});
MemorySizeCalculator calculator = new MemorySizeCalculator.Builder(context).build();
int defaultMemoryCacheSize = calculator.getMemoryCacheSize();
int defaultBitmapPoolSize = calculator.getBitmapPoolSize();
int customMemoryCacheSize = (int) (1.2 * defaultMemoryCacheSize);
int customBitmapPoolSize = (int) (1.2 * defaultBitmapPoolSize);
builder.setMemoryCache(new LruResourceCache(customMemoryCacheSize));
builder.setBitmapPool(new LruBitmapPool(customBitmapPoolSize));
//将配置 Glide 的机会转交给 GlideImageLoaderStrategy,如你觉得框架提供的 GlideImageLoaderStrategy
//并不能满足自己的需求,想自定义 BaseImageLoaderStrategy,那请你最好实现 GlideAppliesOptions
//因为只有成为 GlideAppliesOptions 的实现类,这里才能调用 applyGlideOptions(),让你具有配置 Glide 的权利
BaseImageLoaderStrategy loadImgStrategy = appComponent.imageLoader().getLoadImgStrategy();
if (loadImgStrategy instanceof GlideAppliesOptions) {
((GlideAppliesOptions) loadImgStrategy).applyGlideOptions(context, builder);
}
}
@Override
public void applyOptions(Context context, GlideBuilder builder) {
super.applyOptions(context, builder);
builder.setDiskCache(new DiskCache.Factory() {
@Nullable
@Override
public DiskCache build() {
// Careful: the external cache directory doesn't enforce permissions
return DiskLruCacheWrapper.get(DataHelper.makeDirs(
new File(RepositoryUtils.INSTANCE.obtainRepositoryComponent(context).cacheFile(), "Glide")),
IMAGE_DISK_CACHE_MAX_SIZE);
}
});
MemorySizeCalculator calculator = new MemorySizeCalculator.Builder(context).build();
int defaultMemoryCacheSize = calculator.getMemoryCacheSize();
int defaultBitmapPoolSize = calculator.getBitmapPoolSize();
int customMemoryCacheSize = (int) (1.2 * defaultMemoryCacheSize);
int customBitmapPoolSize = (int) (1.2 * defaultBitmapPoolSize);
builder.setMemoryCache(new LruResourceCache(customMemoryCacheSize));
builder.setBitmapPool(new LruBitmapPool(customBitmapPoolSize));
//将配置 Glide 的机会转交给 GlideImageLoaderStrategy,如你觉得框架提供的 GlideImageLoaderStrategy
//并不能满足自己的需求,想自定义 BaseImageLoaderStrategy,那请你最好实现 GlideAppliesOptions
//因为只有成为 GlideAppliesOptions 的实现类,这里才能调用 applyGlideOptions(),让你具有配置 Glide 的权利
BaseImageLoaderStrategy imageLoaderStrategy = ArmsUtils.INSTANCE.obtainArmsComponent(context).imageLoader().getStrategy();
if (imageLoaderStrategy instanceof GlideAppliesOptions) {
((GlideAppliesOptions) imageLoaderStrategy).applyGlideOptions(context, builder);
}
}
@Override
public void applyOptions(final Context context, GlideBuilder builder) {
builder.setDiskCache(
new DiskCache.Factory() {
@Override
public DiskCache build() {
return DiskLruCacheWrapper.get(
Glide.getPhotoCacheDir(context), ConfigConstants.MAX_DISK_CACHE_SIZE);
}
});
builder.setMemoryCache(new LruResourceCache(ConfigConstants.MAX_MEMORY_CACHE_SIZE));
}
@Override
public void applyOptions(final Context context, GlideBuilder builder) {
SharedPreferencesManager manager = new SharedPreferencesManager(context);
final String cacheSize = manager.getString(DISK_CACHE_KEY, DISK_CACHE_160MB);
String decodeFormat = manager.getString(DECODE_FORMAT_KEY, DECODE_FORMAT_ARGB_8888);
final String cacheName = manager.getString(DISK_CACHE_NAME_KEY, DEFAULT_CACHE_NAME);
DecodeFormat format = null;
switch (decodeFormat) {
case DECODE_FORMAT_RGB_565:
format = DecodeFormat.PREFER_RGB_565;
break;
default:
case DECODE_FORMAT_ARGB_8888:
format = DecodeFormat.PREFER_ARGB_8888;
break;
}
// 高版本配置,没有禁用Hardware Bitmaps,仅Android O以上版本的新特性
// 参阅https://muyangmin.github.io/glide-docs-cn/doc/hardwarebitmaps.html了解不能使用Hardware Bitmaps的情况
// 不禁用可能会导致错误,但是有着节省内存和避免内存抖动的优点
builder.setDefaultRequestOptions(new RequestOptions()
.format(format)
);
builder.setDiskCache(new DiskCache.Factory() {
@Override
public DiskCache build() {
int sizeInMB = 160;
switch (cacheSize) {
case DISK_CACHE_40MB:
sizeInMB = 40;
break;
case DISK_CACHE_80MB:
sizeInMB = 80;
break;
case DISK_CACHE_160MB:
sizeInMB = 160;
break;
case DISK_CACHE_320MB:
sizeInMB = 320;
break;
default:
case DISK_CACHE_640MB:
sizeInMB = 640;
break;
}
File path = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
path = context.getExternalCacheDirs()[(context.getExternalCacheDirs().length - 1)];
} else {
path = context.getExternalCacheDir();
}
File cacheLocation = new File(path, cacheName);
cacheLocation.mkdirs();
return DiskLruCacheWrapper.create(cacheLocation, sizeInMB * 1024 * 1024);
}
});
}