2017-03-15 32 views

答えて

5

UIスレッド外でGlide.get(context).clearDiskCache()を呼び出します。 (あまりにもディスクキャッシュをクリアした後に驚きを防ぐためにclearMemory()を考える)これは私のため

new Thread(new Runnable() { 
      @Override 
      public void run() { 
      Glide.get(MainActivity.this).clearDiskCache(); 
      } 
    }).start(); 

を働いていた画像の多くはので、私はキャッシュサイズが50メガバイトより大きくなるとキャッシュをクリアしたい私のアプリであります。

あなたが限度に50メガバイトを置きたい場合には、あなたは

import android.annotation.TargetApi; 
import android.content.Context; 
import android.os.Build; 
import android.os.Environment; 
import android.os.StatFs; 
import android.util.Log; 

import com.bumptech.glide.Glide; 
import com.bumptech.glide.GlideBuilder; 
import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory; 
import com.bumptech.glide.module.GlideModule; 
import com.example.MyApplication; 

import java.util.Locale; 

public class LimitCacheSizeGlideModule implements GlideModule { 
    // Modern device should have 8GB (=7.45GiB) or more! 
    private static final int SMALL_INTERNAL_STORAGE_THRESHOLD_GIB = 6; 
    private static final int DISK_CACHE_SIZE_FOR_SMALL_INTERNAL_STORAGE_MIB = 50*1024*1024; 

    @Override 
    public void applyOptions(Context context, GlideBuilder builder) { 
     if (MyApplication.from(context).isTest()) return; // NOTE: StatFs will crash on robolectric. 

     double totalGiB = getTotalBytesOfInternalStorage()/1024.0/1024.0/1024.0; 
     Log.i(String.format(Locale.US, "Internal Storage Size: %.1fGiB", totalGiB)); 
     if (totalGiB < SMALL_INTERNAL_STORAGE_THRESHOLD_GIB) { 
      Log.i("Limiting image cache size to " + DISK_CACHE_SIZE_FOR_SMALL_INTERNAL_STORAGE_MIB + "MiB"); 
      builder.setDiskCache(new InternalCacheDiskCacheFactory(context, DISK_CACHE_SIZE_FOR_SMALL_INTERNAL_STORAGE_MIB)); 
     } 
    } 

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

    private long getTotalBytesOfInternalStorage() { 
     // http://stackoverflow.com/a/4595449/1474113 
     StatFs stat = new StatFs(Environment.getDataDirectory().getPath()); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { 
      return getTotalBytesOfInternalStorageWithStatFs(stat); 
     } else { 
      return getTotalBytesOfInternalStorageWithStatFsPreJBMR2(stat); 
     } 
    } 

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) 
    private long getTotalBytesOfInternalStorageWithStatFs(StatFs stat) { 
     return stat.getTotalBytes(); 
    } 

    @SuppressWarnings("deprecation") 
    private long getTotalBytesOfInternalStorageWithStatFsPreJBMR2(StatFs stat) { 
     return (long) stat.getBlockSize() * stat.getBlockCount(); 
    } 
} 

グライドモジュールを実装して、あなたのマニフェストに、私は現在のキャッシュを知って取得しますどのようにこの

<manifest 

    ... 

    <application> 

     <meta-data 
      android:name="YourPackageNameHere.LimitCacheSizeGlideModule" 
      android:value="GlideModule" /> 

     ... 

    </application> 
</manifest>  
+0

ようにそれを追加することができますサイズを変更して、現在のキャッシュサイズが50 MBを超えると、上記のメソッドを呼び出すでしょうか? –

+0

制限を50 MBに設定すると、Glide.get(MainActivity.this).clearDiskCache();を使用してキャッシュをクリアする必要があります。またはライブラリが自動的にそれを行うでしょうか? –

+0

@SapnaSharmaそれはあなたがそれを自動的に行われる手動でそれをクリアする必要はありません制限を設定します –

関連する問題