Glide 判断图片是否缓存

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方法,出现了不确定性,所有请谨慎使用。

你可能感兴趣的:(Android)