3
글라이드 라이브러리를 사용하여 이미지를로드합니다. 캐시 크기가 50MB보다 커지면 캐시를 지우고 싶을 정도로 많은 앱 이미지가 있습니다. 다른 사람이 나를 도울 수 있습니까?글라이드, 캐시 크기가 50MB보다 클 때 캐시 지우기
글라이드 라이브러리를 사용하여 이미지를로드합니다. 캐시 크기가 50MB보다 커지면 캐시를 지우고 싶을 정도로 많은 앱 이미지가 있습니다. 다른 사람이 나를 도울 수 있습니까?글라이드, 캐시 크기가 50MB보다 클 때 캐시 지우기
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>
처럼 추가를 구현할 수 제한 50 메가 데려 가고 싶다는 크기 그래서 나는 현재의 캐시 크기가 50MB를 넘을 때 위의 메소드를 호출 할 것인가? –
한도를 50MB로 설정하면 Glide.get (MainActivity.this) .clearDiskCache();를 사용하여 캐시를 지울 필요가 있습니까? 또는 도서관이 자동으로 그렇게 할 것인가? –
@SapnaSharma는 수동으로 지우지 않아도되는 제한을 자동으로 설정합니다. –