各种第三方Android开发Android开发笔记

Glide的使用

2016-09-20  本文已影响3644人  敖大胆

Glide的使用

Glide是google开发用于Android加载媒体的类库,包括图片,gif,video,已经在很多项目中使用,灵活快速。下面我们看如何使用它,如果有什么不对的请不吝指教

  1. 创建GlideModel

     public class GlideConfigModule implements GlideModule {
       @Override
       public void applyOptions(Context context, GlideBuilder builder) {
    
       }
    
       @Override
       public void registerComponents(Context context, Glide glide) {
    
       }
     }
    
  2. AndroidManifest.xmlmeta-data配置GlideModule

     <meta-data android:name="com.branch.www.glidedemo.GlideConfigModule"
                android:value="GlideModule"/>
    
  3. 解决GlideModel冲突

    有可能加入的library中也同样配置了GlideModule,如果配置了多个会出现冲突,无法编译运行,解决方式可在AndroidManifest.xml移除

     <meta-data android:name=”com.mypackage.MyGlideModule” tools:node=”remove” />
    
  4. 默认Bitmap Format 是 RGB_565

    为了降低内存消耗,Glide默认配置的Bitmap Format 为 RGB_565,修改GlideBuilder's setDecodeFormat设置

         builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
    
  5. 配置Disk缓存

    使用GlideBuilder's setDiskCache()方法设置缓存目录和大小。
    默认Glide使用InternalCacheDiskCacheFactory,默认最大缓存250M,这是一个应用内部目录的缓存,缓存的图片只能本应用可以有权获取。

       builder.setDiskCache(
       new InternalCacheDiskCacheFactory(context, yourSizeInBytes));
    
       builder.setDiskCache(
       new InternalCacheDiskCacheFactory(context, cacheDirectoryName, yourSizeInBytes));
    

    你也可以使用ExternalCacheDiskCacheFactory去设置SD卡缓存

       builder.setDiskCache(
       new ExternalCacheDiskCacheFactory(context, cacheDirectoryName, yourSizeInBytes));
    

    或者使用DiskLruCacheFactory配置自己管理的缓存目录和大小

         // If you can figure out the folder without I/O:
         // Calling Context and Environment class methods usually do I/O.
         builder.setDiskCache(
           new DiskLruCacheFactory(getMyCacheLocationWithoutIO(), yourSizeInBytes));
    
         // In case you want to specify a cache folder ("glide"):
         builder.setDiskCache(
           new DiskLruCacheFactory(getMyCacheLocationWithoutIO(), "glide", yourSizeInBytes));
    
         // In case you need to query the file system while determining the folder:
         builder.setDiskCache(new DiskLruCacheFactory(new CacheDirectoryGetter() {
             @Override public File getCacheDirectory() {
                 return getMyCacheLocationBlockingIO();
             }
         }), yourSizeInBytes);
    

    或者你想完全控制缓存可以通过实现DiskCache.Factory然后用DiskLruCacheWrapper去创建你期望的目录。

         builder.setDiskCache(new DiskCache.Factory() {
         @Override public DiskCache build() {
             File cacheLocation = getMyCacheLocationBlockingIO();
             cacheLocation.mkdirs();
             return DiskLruCacheWrapper.get(cacheLocation, yourSizeInBytes);
          }
         });
    

    如果你不需要任何缓存可以使用DiskCacheAdapter或者自己实现DiskCacheDiskCacheAdapter内部没有任何实现。

  6. Bitmap Pool

    为了避免Bitmap频繁解码,我们通常会在系统内存中缓存一部分经常使用的图片。GlideBuilder's setBitmapPool()可以设置你想要的缓存策略,缓存大小。例如我们常用的LRU策略。

         builder.setBitmapPool(new LruBitmapPool(sizeInBytes));
    

    或实现BitmapPool自定义一个吧。

    Glide所有的基本配置都在GlideModule内,使用Glide提供的缓存方式如下:

     builder.setDiskCache(new DiskLruCacheFactory(dirPath, DiskCache.Factory.DEFAULT_DISK_CACHE_SIZE));
    

    如果需要自定义实现DiskCache.Factory

    GlideModule 更多配置如下:

    GlideModuleGlideModule
上一篇 下一篇

猜你喜欢

热点阅读