Android 滑翔。缓存到外部存储器(SD卡)
我用于在android应用程序中加载图像。Android 滑翔。缓存到外部存储器(SD卡),android,android-glide,Android,Android Glide,我用于在android应用程序中加载图像。 3.5更新后,开发人员提供了接口。 根据(磁盘缓存),我可以使用setDiskCache方法和ExternalCacheDiskCacheFactory设置缓存目录 但我看不出有什么不同。所有缓存仍在默认缓存目录中的内部存储器上。 构建.渐变: dependencies { ... compile 'com.github.bumptech.glide:glide:3.6.1' } Glide.with(context) .load(
3.5更新后,开发人员提供了接口。
根据(磁盘缓存),我可以使用
setDiskCache
方法和ExternalCacheDiskCacheFactory
设置缓存目录
但我看不出有什么不同。所有缓存仍在默认缓存目录中的内部存储器上。构建.渐变:
dependencies {
...
compile 'com.github.bumptech.glide:glide:3.6.1'
}
Glide.with(context)
.load("some_url")
.dontAnimate()
.centerCrop()
.override(100, 100)
.into(holder.iv_image);
Android清单:<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>
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) {
}
}
...
-keepnames class * com.myapp.GlideConfig
proguard rules.pro:<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>
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) {
}
}
...
-keepnames class * com.myapp.GlideConfig
滑动用法:
dependencies {
...
compile 'com.github.bumptech.glide:glide:3.6.1'
}
Glide.with(context)
.load("some_url")
.dontAnimate()
.centerCrop()
.override(100, 100)
.into(holder.iv_image);
要设置值为
setDiskCache
的GlideBuilder
,可以将ExternalStorageDirectory设置为缓存目录
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);
}
检查
希望它对你有帮助。你认为“内部存储默认缓存目录”是什么?代码在我看来还行,所以我想知道这是否只是一个关于Android认为什么是内部/外部存储的混淆问题。@TimMalseed,没有混淆。Glide和其他图像加载程序默认情况下将图像缓存放在“/data/data/com.package/cache”(内部存储)中。但“GlideModule”功能应该可以做到这一点。也许我遗漏了什么。你在什么设备/ROM上测试这个?你不能说“没有混乱”。当谈到Android上的内部/外部存储时,连谷歌都感到困惑。@TimMalseed三星Galaxy S2。如果你在GlideModule的applyOptions中添加日志语句,是否会打印任何内容?您能否将问题缩小到您的工厂,或者GlideModulesEdiskCache已被清除:(