Glide 判斷圖片是否緩存
Glide版本4.9.0
大多數文章的Glide 緩存判斷都是異步的,可以實現功能但使用起來很不友好。通過分析源碼,總結出了同步判斷的方法。
1.通過反射,獲取緩存File。
public static File getCache(Context context,String url){
File cacheFile = null;
RequestFutureTarget<File> futureTarget= (RequestFutureTarget<File>) Glide.with(context).downloadOnly().load(url).apply(new GlideOptions().onlyRetrieveFromCache(true)).submit();
Class<?> class1 = futureTarget.getClass();
Field field = null;
try {
//等待Glide給resource對象賦值
synchronized (futureTarget) {
futureTarget.wait();
}
field = class1.getDeclaredField("resource");
field.setAccessible(true);//開放權限
cacheFile= (File) field.get(futureTarget);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return cacheFile;
}
2.判斷File是否爲null。
public static boolean isCache(Context context, String url){
return getCache(context,url)!=null;
}
**注意:**以上代碼雖然實現的同步判斷的功能,但由於代碼中有wait
方法,出現了不確定性,所有請謹慎使用。