2017-03-15 4 views

답변

5

UI 스레드 외부에서 Glide.get (context) .clearDiskCache()를 호출하십시오. 그래서 캐시 크기가 50MB보다 큰되면 캐시를 지우려면 내 응용 프로그램에서 이미지의 많은이 있습니다이 나를

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

근무 (또는 디스크 캐시를 삭제 한 후 놀라움을 방지하기 위해도) clearMemory을 (고려) . 경우에

당신은 당신이 글라이드 모듈을

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 메가 데려 가고 싶다는 크기 그래서 나는 현재의 캐시 크기가 50MB를 넘을 때 위의 메소드를 호출 할 것인가? –

+0

한도를 50MB로 설정하면 Glide.get (MainActivity.this) .clearDiskCache();를 사용하여 캐시를 지울 필요가 있습니까? 또는 도서관이 자동으로 그렇게 할 것인가? –

+0

@SapnaSharma는 수동으로 지우지 않아도되는 제한을 자동으로 설정합니다. –