2015-12-13 6 views
15

Ich verwende Glide zum Laden von Bildern in meiner Android-Anwendung.
Nach 3.5 Update, Entwickler zur Verfügung gestellt GlideModule Schnittstelle.
Nach this article (Disk Cache) kann ich Cache-Verzeichnis mit setDiskCache Methode und ExternalCacheDiskCacheFactory festlegen.
Aber ich sehe keinen Unterschied. Der gesamte Cache befindet sich noch im internen Speicher im Standard-Cache-Verzeichnis.
Gleiten. Zwischenspeicher für externen Speicher (SD-Karte)


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 mit:

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

Was halten Sie für das 'interne Speicher-Standard-Cache-Verzeichnis'? Der Code sieht für mich OK aus, also frage ich mich, ob das nur eine Frage der Verwirrung darüber ist, was Android als internen/externen Speicher ansieht. –

+0

@TimMalseed, es gibt keine Verwirrung. Glide und andere Image Loader setzen den Image-Cache standardmäßig auf '/data/data/com.package/cache' (Interner Speicher). Aber "GlideModule" -Funktion sollte den Trick machen. Vielleicht vermisse ich etwas. –

+0

Mit welchem ​​Gerät/ROM testen Sie dies? Du kannst nicht sagen "es gibt keine Verwirrung". Wenn es um interne/externe Speicherung auf Android geht, sind selbst Google verwirrt. –

Antwort

11

Zur Einrichtung GlideBuilder mit dem Wert von setDiskCache Sie können Ihre ExternalStorageDirectory als Cache-Verzeichnis gesetzt .

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); 
} 

prüfen Can't set GlideBuilder

Hoffe, dass Sie seine Hilfe.

+2

setDiskCache ist veraltet :( –

Verwandte Themen