privatestatic RequestManagerRetriever getRetriever(@Nullable Context context) { // Context could be null for other reasons (ie the user passes in null), but in practice it will // only occur due to errors with the Fragment lifecycle. Preconditions.checkNotNull( context, "You cannot start a load on a not yet attached View or a Fragment where getActivity() " + "returns null (which usually occurs when getActivity() is called before the Fragment " + "is attached or after the Fragment is destroyed)."); return Glide.get(context).getRequestManagerRetriever(); }
privatestatic GeneratedAppGlideModule getAnnotationGeneratedGlideModules(Context context) { GeneratedAppGlideModuleresult=null; try { // 反射获取 Class<GeneratedAppGlideModule> clazz = (Class<GeneratedAppGlideModule>) Class.forName("com.bumptech.glide.GeneratedAppGlideModuleImpl"); // 反射实例化对象 result = clazz.getDeclaredConstructor(Context.class).newInstance(context.getApplicationContext()); } catch (ClassNotFoundException e) { if (Log.isLoggable(TAG, Log.WARN)) { Log.w( TAG, "Failed to find GeneratedAppGlideModule. You should include an" + " annotationProcessor compile dependency on com.github.bumptech.glide:compiler" + " in your application and a @GlideModule annotated AppGlideModule implementation" + " or LibraryGlideModules will be silently ignored"); } // These exceptions can't be squashed across all versions of Android. } catch (InstantiationException e) { throwIncorrectGlideModule(e); } catch (IllegalAccessException e) { throwIncorrectGlideModule(e); } catch (NoSuchMethodException e) { throwIncorrectGlideModule(e); } catch (InvocationTargetException e) { throwIncorrectGlideModule(e); } return result; }
初始化Glide
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
staticvoidcheckAndInitializeGlide( @NonNull Context context, @Nullable GeneratedAppGlideModule generatedAppGlideModule) { // In the thread running initGlide(), one or more classes may call Glide.get(context). // Without this check, those calls could trigger infinite recursion. if (isInitializing) { thrownewIllegalStateException( "Glide has been called recursively, this is probably an internal library error!"); } isInitializing = true; try { initializeGlide(context, generatedAppGlideModule); } finally { isInitializing = false; } }
publicvoidclearMemory() { // Engine asserts this anyway when removing resources, fail faster and consistently Util.assertMainThread(); // memory cache needs to be cleared before bitmap pool to clear re-pooled Bitmaps too. See #687. memoryCache.clearMemory(); bitmapPool.clearMemory(); arrayPool.clearMemory(); }