Glide 4.10導入和GlideModule相關參數說明

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());
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章