3
イメージ読み込みにGlideライブラリを使用しています。私のアプリにはたくさんの画像があるので、キャッシュサイズを50MB以上にするとキャッシュをクリアしたい。 誰かが私を助けることができますか?Glide、キャッシュサイズが50 mbを超えるとキャッシュがクリアされる
イメージ読み込みにGlideライブラリを使用しています。私のアプリにはたくさんの画像があるので、キャッシュサイズを50MB以上にするとキャッシュをクリアしたい。 誰かが私を助けることができますか?Glide、キャッシュサイズが50 mbを超えるとキャッシュがクリアされる
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>
ようにそれを追加することができますサイズを変更して、現在のキャッシュサイズが50 MBを超えると、上記のメソッドを呼び出すでしょうか? –
制限を50 MBに設定すると、Glide.get(MainActivity.this).clearDiskCache();を使用してキャッシュをクリアする必要があります。またはライブラリが自動的にそれを行うでしょうか? –
@SapnaSharmaそれはあなたがそれを自動的に行われる手動でそれをクリアする必要はありません制限を設定します –