• 鍍金池/ 教程/ Android/ 配置
    配置
    Generated API
    轉換
    選項
    過(guò)渡效果
    關(guān)于Glide
    緩存
    調試
    目標
    占位符
    下載和設置
    入門(mén)指南

    配置

    為了Glide的配置可以正常的工作,庫跟應用程序需要執行一序列的步驟。請注意,庫不希望注冊不需要的附加的組件。

    庫必須:

    1. 添加一個(gè)或多個(gè)LibraryGlideModule實(shí)現
    2. 添加@GlideModule注解給每個(gè)LibraryGlideModule實(shí)現
    3. 添加Glide注解處理器依賴(lài)關(guān)系

    一個(gè)使用OkHttp集成庫的Glide例子如下所示:

    @GlideModule
    public final class OkHttpLibraryGlideModule extends LibraryGlideModule {
      @Override
      public void registerComponents(Context context, Registry registry) {
        registry.replace(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory());
      }
    }

    使用@GlideModule注解需要Glide注解依賴(lài)庫:

    compile 'com.github.bumptech.glide:annotations:4.0.0-RC1'

    應用程序

    應用程序必須:

    1. 添加一個(gè)合適的AppGlideModule實(shí)現
    2. 添加一個(gè)或多個(gè)LibraryGlideModule實(shí)現
    3. AppGlideModule實(shí)現類(lèi)和所有的LibraryGlideModule實(shí)現類(lèi)添加@GlideModule注解
    4. 添加Glide注解處理類(lèi)依賴(lài)關(guān)系
    5. AppGlideModules添加proguard.cfg的keep

    在Glide的Flickr sample app的一個(gè)AppGlideModule例子:

    @GlideModule
    public class FlickrGlideModule extends AppGlideModule {
      @Override
      public void registerComponents(Context context, Registry registry) {
        registry.append(Photo.class, InputStream.class, new FlickrModelLoader.Factory());
      }
    }

    包含Glide注解處理器要求Glide注解依賴(lài)和注解處理器:

    compile 'com.github.bumptech.glide:annotations:4.0.0-RC1'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.0.0-RC1'

    最后,您應該在proguard.cfg保持AppGlideModule實(shí)現:

    -keep public class * extends com.bumptech.glide.module.AppGlideModule
    -keep class com.bumptech.glide.GeneratedAppGlideModuleImpl

    應用選項

    Glide允許應用程序使用AppGlideModule實(shí)現完全控制Glide的內存跟磁盤(pán)緩存用法。Glide嘗試給大多數應用程序提供合理的默認值,但是對于某些應用程序,需要自定義這些值。一定要衡量避免任何性能下降的修改。

    內存緩存

    默認情況下,Glide使用LruResourceCache,一個(gè)內存緩存接口的默認實(shí)現使用固定的內存和LRU算法。LruResourceCache的大小由Glide的MemorySizeCalculator類(lèi)決定,它可以查看設備內存是否不足以及屏幕的分辨率。

    應用程序可以在A(yíng)ppGlideModule類(lèi)的applyOptions(Context, GlideBuilder)方法中配置MemorySizeCalculator定制化內存緩存的大小。

    @GlideModule
    public class YourAppGlideModule extends AppGlideModule {
      @Override
      public void applyOptions(Context context, GlideBuilder builder) {
        MemorySizeCalculator calculator = new MemorySizeCalculator.Builder(context)
            .setMemoryCacheScreens(2)
            .build();
        builder.setMemoryCache(new LruResourceCache(calculator.getMemoryCacheSize()));
      }
    }

    應用程序可以直接覆蓋緩存大?。?/p>

    @GlideModule
    public class YourAppGlideModule extends AppGlideModule {
      @Override
      public void applyOptions(Context context, GlideBuilder builder) {
        int memoryCacheSizeBytes = 1024 * 1024 * 20; // 20mb
        builder.setMemoryCache(new LruResourceCache(memoryCacheSizeBytes));
      }
    }

    應用程序可以提供他們自己的內存緩存實(shí)現類(lèi):

    @GlideModule
    public class YourAppGlideModule extends AppGlideModule {
      @Override
      public void applyOptions(Context context, GlideBuilder builder) {
        builder.setMemoryCache(new YourAppMemoryCacheImpl());
      }
    }

    磁盤(pán)緩存

    Glide使用DiskLruCacheWrapper作為默認的磁盤(pán)緩存。DiskLruCacheWrapper是使用LRU算法的固定的磁盤(pán)緩存大小。默認的磁盤(pán)緩存大小是250MB并且在程序緩存文件夾的特定的目錄。

    如果顯示的媒體文件是公開(kāi)的,應用可以將位置改變?yōu)橥獠看鎯Γò](méi)有認證的網(wǎng)站,搜索引擎等等):

    @GlideModule
    public class YourAppGlideModule extends AppGlideModule {
      @Override
      public void applyOptions(Context context, GlideBuilder builder) {
        builder.setDiskCache(new ExternalDiskCacheFactory(context));
      }
    }

    應用程序可以改變磁盤(pán)緩存大小,不管是內部的還是外部的:

    @GlideModule
    public class YourAppGlideModule extends AppGlideModule {
      @Override
      public void applyOptions(Context context, GlideBuilder builder) {
        int diskCacheSizeBytes = 1024 * 1024 * 100; // 100 MB
        builder.setDiskCache(new InternalDiskCacheFactory(context, diskCacheSizeBytes));
      }
    }

    應用程序可以改變外部存儲或者內部存儲的緩存文件夾的名字:

    @GlideModule
    public class YourAppGlideModule extends AppGlideModule {
      @Override
      public void applyOptions(Context context, GlideBuilder builder) {
        int diskCacheSizeBytes = 1024 * 1024 * 100; // 100 MB
        builder.setDiskCache(
            new InternalDiskCacheFactory(context, "cacheFolderName", diskCacheSizeBytes));
      }
    }

    應用程序可以選擇實(shí)現DiskCache接口并提供他們自己的DiskCache.Factory實(shí)例。Glide使用工廠(chǎng)接口在后臺線(xiàn)程開(kāi)啟磁盤(pán)緩存。緩存可以做I/O操作。例如:檢查目標目錄的存在沒(méi)有違反在嚴格模式。

    @GlideModule
    public class YourAppGlideModule extends AppGlideModule {
      @Override
      public void applyOptions(Context context, GlideBuilder builder) {
        builder.setDiskCache(new DiskCache.Factory() {
            @Override
            public DiskCache build() {
              return new YourAppCustomDiskCache();
            }
        });
      }
    }

    注冊組件

    應用程序和庫都可以注冊一些繼承Glide方法的組件,可用的組件包括:

    1. ModelLoader加載自定義模型(URL, URI, 任意的POJO)和數據(輸入流,文件描述)
    2. ResourceDecoder解碼新的資源(Drawable,Bitmap)或者新的數據類(lèi)型(輸入流,文件描述)
    3. Encoder寫(xiě)數據(輸入流,文件描述)Glide的磁盤(pán)緩存
    4. ResourceTranscoder從一種資源(BitmapResource)轉換為其他類(lèi)型的資源(DrawableResource)
    5. ResourceEncoder將資源(BitmapResource, DrawableResource)寫(xiě)入Glide的磁盤(pán)緩存

    注冊組件使用Registry類(lèi)。比如:添加ModelLoader可以為自定義模型對象獲得一個(gè)輸入流。

    @GlideModule
    public class YourAppGlideModule extends AppGlideModule {
      @Override
      public void registerComponents(Context context, Registry registry) {
        registry.append(Photo.class, InputStream.class, new CustomModelLoader.Factory());
      }
    }

    任意數量的組件可以注冊在單一的GlideModule。ModelLoader和ResourceDecoder可以有多個(gè)相同類(lèi)型參數的實(shí)現類(lèi)。

    注冊的組件列表,包括那些Glide默認注冊的和那些在模型中注冊的定義的負載路徑。每個(gè)附件路徑是一步步模型提供的負載資源類(lèi)型通過(guò)as()指定的類(lèi)型。負載路徑粗略符合下一步驟:

    1. 模型->數據(由ModelLoader處理)
    2. 數據->資源(由ResourceDecoder處理)
    3. 資源->轉換資源(可選,由ResourceTranscoder處理)

    Encoder第一步時(shí),寫(xiě)入數據到Glide磁盤(pán)緩存。ResourceEncoder在第二步時(shí),寫(xiě)資源到Glide磁盤(pán)緩存。

    當一個(gè)請求開(kāi)啟時(shí),Glide將嘗試從模型到請求資源的所有可用的路徑。只要有任何一個(gè)負載路徑成功則請求成功。只有所有負載路徑都失敗請求才失敗。

    注冊表中的prepend(),append()和replace()方法可用于設置Glide將嘗試每個(gè)ModelLoader和ResourceDecoder的順序。通過(guò)確保首先注冊處理最常見(jiàn)類(lèi)型的ModelLoaders和ResourceDecoders,可以使請求更高效。組件排序還可以允許您注冊處理模型或數據的特定子集的組件(即只有某些類(lèi)型的Uris或僅某些圖像格式),同時(shí)還具有附加的全部組件來(lái)處理其余部分。

    模塊類(lèi)和注解

    Glide v4依賴(lài)于兩個(gè)類(lèi)AppGlideModule和LibraryGlideModule來(lái)配置Glide單例。允許這兩個(gè)類(lèi)注冊其他組件,如:ModelLoaders,ResourceDecoders等。只有AppGlideModules允許配置應用程序特定的設置,如緩存實(shí)現和大小。

    AppGlideModule

    所有應用程序必須添加AppGlideModule實(shí)現,即使應用程序沒(méi)有更改任何其他設置或在A(yíng)ppGlideModule中實(shí)現任何方法。 AppGlideModule實(shí)現作為一個(gè)信號,允許Glide的注解處理器與所有找到的LibraryGlideModules一起生成單個(gè)組合類(lèi)。

    在給定的應用程序中只能有一個(gè)AppGlideModule實(shí)現(在編譯時(shí)有多個(gè)產(chǎn)生錯誤)。因此,庫絕不能提供AppGlideModule實(shí)現。

    @GlideModule

    為了讓Glide正確找到AppGlideModule和LibraryGlideModule實(shí)現,這兩個(gè)類(lèi)的所有實(shí)現都必須用@GlideModule注解。注解將允許Glide的注解處理器在編譯時(shí)發(fā)現所有實(shí)現。

    注解處理器

    此外,為了找到AppGlideModule和LibraryGlideModules,所有的庫和應用程序還必須包含對Glide的注解處理器的依賴(lài)。

    沖突

    應用程序可能依賴(lài)于多個(gè)庫,每個(gè)庫可能包含一個(gè)或多個(gè)LibraryGlideModules。在極少數情況下,這些LibraryGlideModule可能定義了沖突的選項,或者包括應用程序希望避免的行為。應用程序可以通過(guò)將@Excludes注解添加到其AppGlideModule來(lái)解決這些沖突或避免不必要的依賴(lài)關(guān)系。

    例如,如果您依賴(lài)于您想要避免的LibraryGlideModule的庫,請傳入com.example.unwanted.GlideModule:

    @Excludes( “com.example.unwanted.GlideModule”)
    @GlideModule
    public final class MyAppGlideModule extends AppGlideModule {}

    您還可以排除多個(gè)模塊:

    @Excludes({“com.example.unwanted.GlideModule”,“com.example.conflicing.GlideModule”})
    @GlideModule
    public final class MyAppGlideModule extends AppGlideModule {}

    如果您仍在從Glide v3遷移過(guò)程中,可以使用@Excludes來(lái)排除LibraryGlideModules和已棄用的GlideModule實(shí)現。

    清單解析

    為了保持與Glide v3的GlideModules的向后兼容性,Glide仍然從應用程序和任何包含的庫中分析AndroidManifest.xml文件,并將包括清單中列出的任何舊的GlideModules。雖然此功能將在以后的版本中被刪除,但我們現在已經(jīng)保留了行為以減輕轉換。

    如果您已經(jīng)遷移到Glide v4 AppGlideModule和LibraryGlideModule,則可以完全禁用清單解析。這樣做可以提高Glide的初始啟動(dòng)時(shí)間,并避免嘗試解析元數據時(shí)出現一些潛在的問(wèn)題。要禁用清單解析,請覆蓋AppGlideModule實(shí)現中的isManifestParsingEnabled()方法:

    @GlideModule
    public final class MyAppGlideModule extends AppGlideModule {
      @Override
      public boolean isManifestParsingEnabled(){
        return false;
      }
    }
    上一篇:目標下一篇:轉換
    草莓视频在线观看视频6_免费草莓视频_草莓视频在线下载免费官网_草莓视频黄色在线观看