2015-12-13 4 views
15

Io uso Glide per caricare immagini nella mia applicazione Android.
Dopo l'aggiornamento 3.5, gli sviluppatori hanno fornito l'interfaccia GlideModule.
In base a this article (Disk Cache) È possibile impostare la directory della cache, utilizzando il metodo setDiskCache e ExternalCacheDiskCacheFactory.
Ma non vedo alcuna differenza. Tutta la cache è ancora nella memoria interna nella directory cache predefinita.
Glide. Cache su memoria esterna (scheda SD)


build.gradle:

dependencies { 
    ... 
    compile 'com.github.bumptech.glide:glide:3.6.1' 
} 

Android Manifest:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<application ...> 
<meta-data 
     android:name="com.myapp.GlideConfig" 
     android:value="GlideModule" /> 
</application> 

GlideConfig.java:

public class GlideConfig implements GlideModule { 
    @Override 
    public void applyOptions(Context context, GlideBuilder builder) { 
     String state = Environment.getExternalStorageState(); 
     if (Environment.MEDIA_MOUNTED.equals(state)) { 
      Log.e("GlideConfig", "MEDIA_MOUNTED"); 
      builder.setDiskCache(
       context.getString(R.string.app_name), 
         419430400));//400Mb 
      //Environment.getExternalStorageDirectory().getPath() 
      // + "/" 
      // + context.getString(R.string.app_name) 
     } 
     else { 
      Log.e("GlideConfig", "!MEDIA_MOUNTED"); 
     } 
    } 

    @Override 
    public void registerComponents(Context context, Glide glide) { 
    } 
} 

proguard-rules.pro:

... 
-keepnames class * com.myapp.GlideConfig 

Glide utilizzando:

Glide.with(context) 
.load("some_url") 
.dontAnimate() 
.centerCrop() 
.override(100, 100) 
.into(holder.iv_image); 
+0

Quale consideri la "directory cache predefinita di archiviazione interna"? Il codice mi sembra OK, quindi mi chiedo se si tratta solo di una questione di confusione su ciò che Android considera archiviazione interna/esterna .. –

+0

@TimMalseed, non c'è confusione. Glide e altri caricatori di immagini mettono l'image-cache su '/data/data/com.package/cache' (memoria interna) per impostazione predefinita. Ma la funzione 'GlideModule' dovrebbe fare il trucco. Forse mi manca qualcosa. –

+0

Quale dispositivo/ROM stai testando? Non puoi dire "non c'è confusione". Quando si tratta di archiviazione interna/esterna su Android, anche Google è confuso. –

risposta

11

Per impostare GlideBuilder con valore setDiskCache è possibile impostare l'ExternalStorageDirectory come directory di cache .

if (!Glide.isSetup()) { 
    GlideBuilder gb = new GlideBuilder(this); 
    DiskCache dlw = DiskLruCacheWrapper.get(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/YourCacheDirectory/"), 250 * 1024 * 1024); 
    gb.setDiskCache(dlw); 
    Glide.setup(gb); 
} 

check Can't set GlideBuilder

Spero il suo aiuto si.

+2

setDiskCache è depracato :( –