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方法,出現了不確定性,所有請謹慎使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章