Glide 導入和GlideModule相關參數說明
Glide依賴
implementation 'com.github.bumptech.glide:glide:4.10.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.10.0'
轉換AndroidX時Glide遇到的問題解決
轉換AndroidX時,Glide編譯報錯:
錯誤: 程序包android.support.annotation不存在
錯誤: 找不到符號
符號: 類 NonNull
位置: 類 GlideOptions
解決方式:
//解決Glide找不到Android聲明庫問題
//圖片緩存
annotationProcessor 'androidx.annotation:annotation:1.1.0'
4.10 GlideModule 配置
@GlideModule
public final class AGlideModule extends com.bumptech.glide.module.AppGlideModule {
private static final String TAG = AGlideModule.class.getSimpleName();
@Override
public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
MemorySizeCalculator calculator = new MemorySizeCalculator.Builder(context)
.setMemoryCacheScreens(2)
.build();
//recommended memory cache size for the device
Log.d(TAG,"CacheSize==="+calculator.getMemoryCacheSize());
int cacheSize = calculator.getMemoryCacheSize();
builder.setMemoryCache(new LruResourceCache(cacheSize)); //指定內存緩存大小
// 指定位置在packageName/cache/glide_cache,大小爲cacheSize的磁盤緩存
builder.setDiskCache(new InternalCacheDiskCacheFactory(context, "glide_cache",cacheSize));
//設置BitmapPool緩存內存大小
builder.setBitmapPool(new LruBitmapPool(cacheSize));
//設置解碼格式RGB_565,該格式解碼的Bitmap不支持透明度
builder.setDefaultRequestOptions(
new RequestOptions()
.format(DecodeFormat.PREFER_RGB_565).disallowHardwareConfig()
);
}
@Override
public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
//設置使用okhttp加載
OkHttpClient client = new OkHttpClient.Builder().connectTimeout(10, TimeUnit.MINUTES).readTimeout(10, TimeUnit.MINUTES).retryOnConnectionFailure(true).build();
registry.replace(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(client));
}
// Disable manifest parsing to avoid adding similar modules twice.
//禁用清單解析,以避免重複添加類似的模塊
@Override
public boolean isManifestParsingEnabled() {
return false;
}
}
較早的版本,已放棄
public class MyGlideModule implements GlideModule {
@Override
public void applyOptions(Context context, GlideBuilder builder) {
/* // 指定位置在packageName/cache/glide_cache,大小爲MAX_CACHE_DISK_SIZE的磁盤緩存
builder.setDiskCache(new InternalCacheDiskCacheFactory(context, "glide_cache", ConfigConstants.MAX_CACHE_DISK_SIZE));
//指定內存緩存大小
builder.setMemoryCache(new LruResourceCache(ConfigConstants.MAX_CACHE_MEMORY_SIZE));
//全部的內存緩存用來作爲圖片緩存
builder.setBitmapPool(new LruBitmapPool(ConfigConstants.MAX_CACHE_MEMORY_SIZE));
builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);//和Picasso配置一樣*/
// 指定位置在packageName/cache/glide_cache,大小爲MAX_CACHE_DISK_SIZE的磁盤緩存
builder.setDiskCache(new InternalCacheDiskCacheFactory(context, "glide_cache", ConfigConstants.MAX_CACHE_DISK_SIZE));
//指定內存緩存大小
builder.setMemoryCache(new LruResourceCache(ConfigConstants.MAX_CACHE_MEMORY_SIZE));
//設置BitmapPool緩存內存大小
builder.setBitmapPool(new LruBitmapPool(ConfigConstants.MAX_CACHE_MEMORY_SIZE));
builder.setDecodeFormat(DecodeFormat.PREFER_RGB_565);
}
@Override
public void registerComponents(Context context, Glide glide) {
OkHttpClient.Builder client = new OkHttpClient.Builder()
.connectTimeout(60, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.writeTimeout(45, TimeUnit.SECONDS);
OkHttpUrlLoader.Factory factory = new OkHttpUrlLoader.Factory(client.build());
glide.register(GlideUrl.class, InputStream.class, factory);
// glide.register(GlideUrl.class, InputStream.class, new HttpUrlGlideUrlLoader.Factory());
}
}