杨说:Glide 4.11.0 生命周期监听

1,651 阅读5分钟

目录

一、Glide解决了什么问题
二、Glide使用
三、Glide配置初始化
四、Glide对生命周期的监听
五、Glide监听到生命周期后的回调

一、Glide解决了什么问题

1 图片加载框架(对远程图片的拉取/缩放/显示),注重平滑滚动。使用高性能、可扩展的图片解码管道、以及动态资源池技术
2 Glide 支持拉取,解码和展示视频快照,图片,和GIF动画
3 可以插入和替换成自己喜爱的任何网络栈。默认基于HttpUrlConnection的栈

二、Glide使用

Glide.with(fragment)
    .load(url)
    .into(imageView);

三 Glide配置初始化

3.1 Glide.get(context)是Glide初始化配置的入口,使用的单例模式

  
 /**
   * Get the singleton.
   *
   * @return the singleton
   */
  @NonNull
  public static Glide get(@NonNull Context context) {
    if (glide == null) {
      GeneratedAppGlideModule annotationGeneratedModule =
          getAnnotationGeneratedGlideModules(context.getApplicationContext());
      synchronized (Glide.class) {
        if (glide == null) {
          checkAndInitializeGlide(context, annotationGeneratedModule);
        }
      }
    }

    return glide;
  }

3.2 getAnnotationGeneratedGlideModules(context.getApplicationContext());如果有GeneratedAppGlideModule则反射创建GeneratedAppGlideModule对象

Glide.java
  
@Nullable
  @SuppressWarnings({"unchecked", "TryWithIdenticalCatches", "PMD.UnusedFormalParameter"})
  private static GeneratedAppGlideModule getAnnotationGeneratedGlideModules(Context context) {
    GeneratedAppGlideModule result = null;
    try {
      Class<GeneratedAppGlideModule> clazz =
          (Class<GeneratedAppGlideModule>)
              Class.forName("com.bumptech.glide.GeneratedAppGlideModuleImpl");
      result =
          clazz.getDeclaredConstructor(Context.class).newInstance(context.getApplicationContext());
    } catch (ClassNotFoundException e) {
      ···
    }
    return result;
  }

3.3 checkAndInitializeGlide(context, annotationGeneratedModule); 检测Glide是否初始化了,如果没有初始化那需要先初始化

 Glide.java

  //这个注解表示只能在单例中调用
  @GuardedBy("Glide.class")
  private static void checkAndInitializeGlide(
      @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) {
      throw new IllegalStateException(
          "You cannot call Glide.get() in registerComponents(),"
              + " use the provided Glide instance instead");
    }
    isInitializing = true;
 	//初始化Glide
    initializeGlide(context, generatedAppGlideModule);
    isInitializing = false;
  }

3.4 initializeGlide(context, generatedAppGlideModule);

 Glide.java  
  
  @GuardedBy("Glide.class")
  private static void initializeGlide(
      @NonNull Context context, @Nullable GeneratedAppGlideModule generatedAppGlideModule) {
  	//初始化Glide
    initializeGlide(context, new GlideBuilder(), generatedAppGlideModule);
  }

3.5 initializeGlide(context, new GlideBuilder(), generatedAppGlideModule);真正开始初始化Glide

Glide.java 
  
@GuardedBy("Glide.class")
  @SuppressWarnings("deprecation")
  private static void initializeGlide(
      @NonNull Context context,
      @NonNull GlideBuilder builder,
      @Nullable GeneratedAppGlideModule annotationGeneratedModule) {
  	//获取全局Context
    Context applicationContext = context.getApplicationContext();
  	//获取配置列表
    List<com.bumptech.glide.module.GlideModule> manifestModules = Collections.emptyList();
    if (annotationGeneratedModule == null || annotationGeneratedModule.isManifestParsingEnabled()) {
      manifestModules = new ManifestParser(applicationContext).parse();
    }

    if (annotationGeneratedModule != null
        && !annotationGeneratedModule.getExcludedModuleClasses().isEmpty()) {
      Set<Class<?>> excludedModuleClasses = annotationGeneratedModule.getExcludedModuleClasses();
      Iterator<com.bumptech.glide.module.GlideModule> iterator = manifestModules.iterator();
      while (iterator.hasNext()) {
        com.bumptech.glide.module.GlideModule current = iterator.next();
        if (!excludedModuleClasses.contains(current.getClass())) {
          continue;
        }
        ···
        iterator.remove();
      }
    }
	···
    RequestManagerRetriever.RequestManagerFactory factory =
        annotationGeneratedModule != null
            ? annotationGeneratedModule.getRequestManagerFactory()
            : null;
    builder.setRequestManagerFactory(factory);
    for (com.bumptech.glide.module.GlideModule module : manifestModules) {
      module.applyOptions(applicationContext, builder);
    }
    if (annotationGeneratedModule != null) {
      annotationGeneratedModule.applyOptions(applicationContext, builder);
    }
  	//这里创建Glide对象,如果配置为null那么会赋值默认值
    Glide glide = builder.build(applicationContext);
    for (com.bumptech.glide.module.GlideModule module : manifestModules) {
      try {
        module.registerComponents(applicationContext, glide, glide.registry);
      } catch (AbstractMethodError e) {
        ···
      }
    }
    if (annotationGeneratedModule != null) {
      annotationGeneratedModule.registerComponents(applicationContext, glide, glide.registry);
    }
    applicationContext.registerComponentCallbacks(glide);
  	//赋值全局的glide
    Glide.glide = glide;
  }

四 Glide对生命周期的监听

4.1 Glide对FragmentActivity的监听

调用Glide.with(fragmentActivity)

Glide.java

  
  @NonNull
  public static RequestManager with(@NonNull FragmentActivity activity) {
    return getRetriever(activity).get(activity);
  }
  
   @NonNull
  public static RequestManager with(@NonNull Activity activity) {
    return getRetriever(activity).get(activity);
  }

getRetriever(activity)

Glide.java

   @NonNull
  private static 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();
  }

Glide.get(context)是Glide初始化配置部分,详见Glide配置初始化。 通过配置获取requestManagerRetriever,如果requestManagerRetriever未null,那么在配置的时候会默认初始化一个
RequestManagerRetriever 创建RequestManager并接收Activity和Fragment的生命周期回调的

 GlideBuilder.java

@NonNull
  Glide build(@NonNull Context context) {
    ···
    RequestManagerRetriever requestManagerRetriever =
        new RequestManagerRetriever(requestManagerFactory);

    return new Glide(
        context,
        engine,
        memoryCache,
        bitmapPool,
        arrayPool,
        requestManagerRetriever,
        connectivityMonitorFactory,
        logLevel,
        defaultRequestOptionsFactory,
        defaultTransitionOptions,
        defaultRequestListeners,
        isLoggingRequestOriginsEnabled,
        isImageDecoderEnabledForBitmaps);
  }
  

获取requestManagerRetriever后调用RequestManagerRetriever的get方法

RequestManagerRetriever.java
  
 @NonNull
  public RequestManager get(@NonNull FragmentActivity activity) {
  	//如果不是在主线程,获取全局的Context
    if (Util.isOnBackgroundThread()) {
      return get(activity.getApplicationContext());
    } else {
      // 判断Activity是否销毁
      assertNotDestroyed(activity);
      //获取FragmentManager
      FragmentManager fm = activity.getSupportFragmentManager();
  	  //创建RequestManager
      return supportFragmentGet(activity, fm, /*parentHint=*/ null, isActivityVisible(activity));
    }
  }
  
  
  

RequestManagerRetriever的get(activity.getApplicationContext());多重判断Context然后返回RequestManager

RequestManagerRetriever.java
  
 @NonNull
  public RequestManager get(@NonNull Context context) {
    if (context == null) {
      throw new IllegalArgumentException("You cannot start a load on a null Context");
  		//如果是在主线程并且不是Application的Context
    } else if (Util.isOnMainThread() && !(context instanceof Application)) {
      if (context instanceof FragmentActivity) {
  		//通过FragmentActivity获取RequestManager
        return get((FragmentActivity) context);
      } else if (context instanceof Activity) {
 		//通过Activity获取RequestManager
        return get((Activity) context);
      } else if (context instanceof ContextWrapper
          // Only unwrap a ContextWrapper if the baseContext has a non-null application context.
          // Context#createPackageContext may return a Context without an Application instance,
          // in which case a ContextWrapper may be used to attach one.
          && ((ContextWrapper) context).getBaseContext().getApplicationContext() != null) {
 		 //通过ContextWrapper获取RequestManager
        return get(((ContextWrapper) context).getBaseContext());
      }
    }
	//通过全局的Content创建RequestManager
    return getApplicationManager(context);
  }

get((FragmentActivity) context);创建RequestManager最后会调用supportFragmentGet(activity, fm, /parentHint=/ null, isActivityVisible(activity));

RequestManagerRetriever.java
  
  @NonNull
  private RequestManager supportFragmentGet(
      @NonNull Context context,
      @NonNull FragmentManager fm,
      @Nullable Fragment parentHint,
      boolean isParentVisible) {
    SupportRequestManagerFragment current =
        getSupportRequestManagerFragment(fm, parentHint, isParentVisible);
    RequestManager requestManager = current.getRequestManager();
    if (requestManager == null) {
      // TODO(b/27524013): Factor out this Glide.get() call
      //初始化Glide配置
      Glide glide = Glide.get(context);
  	  //通过工厂方法创建requestManager,这个requestManager工厂方法可以在外部配置,创建requestManager的时候就会注册相关Activity生命周期的回调
      requestManager =
          factory.build(
              glide, current.getGlideLifecycle(), current.getRequestManagerTreeNode(), context);
  	  //设置RequestManager
      current.setRequestManager(requestManager);
    }
  	//返回requestManager
    return requestManager;
  }

getSupportRequestManagerFragment(fm, parentHint, isParentVisible); 返回SupportRequestManagerFragment,它是一个绑定在Activity上不显示的Fragment用于监听Activity的状态

 RequestManagerRetriever.java

 @NonNull
  private SupportRequestManagerFragment getSupportRequestManagerFragment(
      @NonNull final FragmentManager fm, @Nullable Fragment parentHint, boolean isParentVisible) {
  	//通过tag找到Fragment
    SupportRequestManagerFragment current =
        (SupportRequestManagerFragment) fm.findFragmentByTag(FRAGMENT_TAG);
    if (current == null) {
  	  //如果缓存了那么取出缓存的
      current = pendingSupportRequestManagerFragments.get(fm);
      if (current == null) {
  		//没有缓存需要创建一个,创建ActivityFragmentLifecycle,监听生命周期
        current = new SupportRequestManagerFragment();
  		//这是隐藏Fragment用于监听
        current.setParentFragmentHint(parentHint);
        if (isParentVisible) {
  		  //调用生命周期onStart()
          current.getGlideLifecycle().onStart();
        }
  		//添加到荤菜
        pendingSupportRequestManagerFragments.put(fm, current);
        fm.beginTransaction().add(current, FRAGMENT_TAG).commitAllowingStateLoss();
  		//删除FragmentManager
        handler.obtainMessage(ID_REMOVE_SUPPORT_FRAGMENT_MANAGER, fm).sendToTarget();
      }
    }
    return current;
  }

current.setParentFragmentHint(parentHint);设置隐藏放入Fragment

 SupportRequestManagerFragment.java 
  
  /**
   * Sets a hint for which fragment is our parent which allows the fragment to return correct
   * information about its parents before pending fragment transactions have been executed.
   */
  void setParentFragmentHint(@Nullable Fragment parentFragmentHint) {
    this.parentFragmentHint = parentFragmentHint;
    if (parentFragmentHint == null || parentFragmentHint.getContext() == null) {
      return;
    }
  	//获取FragmentManager
    FragmentManager rootFragmentManager = getRootFragmentManager(parentFragmentHint);
    if (rootFragmentManager == null) {
      return;
    }
    registerFragmentWithRoot(parentFragmentHint.getContext(), rootFragmentManager);
  }

getRootFragmentManager(parentFragmentHint);获取FragmentManager

 SupportRequestManagerFragment.java   
  
  @Nullable
  private static FragmentManager getRootFragmentManager(@NonNull Fragment fragment) {
    while (fragment.getParentFragment() != null) {
      fragment = fragment.getParentFragment();
    }
    return fragment.getFragmentManager();
  }

registerFragmentWithRoot(parentFragmentHint.getContext(), rootFragmentManager); 真的开始注册Fragment

SupportRequestManagerFragment.java   
  
 private void registerFragmentWithRoot(
      @NonNull Context context, @NonNull FragmentManager fragmentManager) {
  	//先remove rootRequestManagerFragment中的Fragment
    unregisterFragmentWithRoot();
  	//获取全局的rootRequestManagerFragment
    rootRequestManagerFragment =
        Glide.get(context)
            .getRequestManagerRetriever()
            .getSupportRequestManagerFragment(context, fragmentManager);
    if (!equals(rootRequestManagerFragment)) {
  	  //将rootRequestManagerFragment添加到childRequestManagerFragments统一管理
      rootRequestManagerFragment.addChildRequestManagerFragment(this);
    }
  }

生命周期的监听是在创建requestManager的时候实现的

RequestManager.java

  RequestManager(
      Glide glide,
      Lifecycle lifecycle,
      RequestManagerTreeNode treeNode,
      RequestTracker requestTracker,
      ConnectivityMonitorFactory factory,
      Context context) {
    this.glide = glide;
    this.lifecycle = lifecycle;
    this.treeNode = treeNode;
    this.requestTracker = requestTracker;
    this.context = context;

    connectivityMonitor =
        factory.build(
            context.getApplicationContext(),
            new RequestManagerConnectivityListener(requestTracker));

    // If we're the application level request manager, we may be created on a background thread.
    // In that case we cannot risk synchronously pausing or resuming requests, so we hack around the
    // issue by delaying adding ourselves as a lifecycle listener by posting to the main thread.
    // This should be entirely safe.
  	//这段代码就是添加生命周期监听的
    if (Util.isOnBackgroundThread()) {
      mainHandler.post(addSelfToLifecycle);
    } else {
      lifecycle.addListener(this);
    }
    lifecycle.addListener(connectivityMonitor);

    defaultRequestListeners =
        new CopyOnWriteArrayList<>(glide.getGlideContext().getDefaultRequestListeners());
    setRequestOptions(glide.getGlideContext().getDefaultRequestOptions());

    glide.registerRequestManager(this);
  }  

4.2 Glide对Activity的监听

调用Glide.with(activity) ,这个与FragmentActivity类似也是先获取,RequestManagerRetriever,然后获取RequestManager 只是调用的包不一样,内部也是创建了一个隐藏的Fragment监听生命周期

 Glide.java

  @NonNull
  public static RequestManager with(@NonNull Activity activity) {
    return getRetriever(activity).get(activity);
  }

获取RequestManager

RequestManagerRetriever.java
  
 public RequestManager get(@NonNull Activity activity) {
    if (Util.isOnBackgroundThread()) {
      return get(activity.getApplicationContext());
    } else {
      assertNotDestroyed(activity);
      android.app.FragmentManager fm = activity.getFragmentManager();
      return fragmentGet(activity, fm, /*parentHint=*/ null, isActivityVisible(activity));
    }
  }
RequestManagerRetriever.java 

 private RequestManager fragmentGet(
      @NonNull Context context,
      @NonNull android.app.FragmentManager fm,
      @Nullable android.app.Fragment parentHint,
      boolean isParentVisible) {
    RequestManagerFragment current = getRequestManagerFragment(fm, parentHint, isParentVisible);
    RequestManager requestManager = current.getRequestManager();
    if (requestManager == null) {
      // TODO(b/27524013): Factor out this Glide.get() call.
  	 //初始化glide 
      Glide glide = Glide.get(context);
  	  //通过工厂方法获取requestManager
      requestManager =
          factory.build(
              glide, current.getGlideLifecycle(), current.getRequestManagerTreeNode(), context);
  	  //将requestManager设置到Fragment中响应生命周期
      current.setRequestManager(requestManager);
    }
    return requestManager;
  }

将RequestManagerFragment注册目标到生命周期中

RequestManagerRetriever.java
  
 private RequestManagerFragment getRequestManagerFragment(
      @NonNull final android.app.FragmentManager fm,
      @Nullable android.app.Fragment parentHint,
      boolean isParentVisible) {
    RequestManagerFragment current = (RequestManagerFragment) fm.findFragmentByTag(FRAGMENT_TAG);
    if (current == null) {
      current = pendingRequestManagerFragments.get(fm);
      if (current == null) {
        current = new RequestManagerFragment();
        current.setParentFragmentHint(parentHint);
        if (isParentVisible) {
          current.getGlideLifecycle().onStart();
        }
        pendingRequestManagerFragments.put(fm, current);
        fm.beginTransaction().add(current, FRAGMENT_TAG).commitAllowingStateLoss();
        handler.obtainMessage(ID_REMOVE_FRAGMENT_MANAGER, fm).sendToTarget();
      }
    }
    return current;
  }

4.3 Glide对Activity生命周期监听总结

1 activity初始化Glide配置获取RequestManagerRetriever,如果没有配置使用默认,这个类管理了所有的生命周期监听
2 通过传进来的Activity获取FragmentManager,设置一个不显示的Fragment用于监听生命周期
3 将Fragment和RequestManager绑定,返回requestManager
4 监听生命周期回调,是在创建RequestManager的时候

4.4 Glide对Fragment生命周期的监听

调用Glide.with(fragment); fragment.getContext()初始化Glide,获取RequestManagerRetriever

Glide.java

  @NonNull
  public static RequestManager with(@NonNull Fragment fragment) {
    return getRetriever(fragment.getContext()).get(fragment);
  }
RequestManagerRetriever.java  
  
  @NonNull
  public RequestManager get(@NonNull Fragment fragment) {
    Preconditions.checkNotNull(
        fragment.getContext(),
        "You cannot start a load on a fragment before it is attached or after it is destroyed");
    if (Util.isOnBackgroundThread()) {
  	  //如果是后台线程使用Application的Context
      return get(fragment.getContext().getApplicationContext());
    } else {
      FragmentManager fm = fragment.getChildFragmentManager();
  	  //这里的逻辑和FragmentActivity一致了 
      return supportFragmentGet(fragment.getContext(), fm, fragment, fragment.isVisible());
    }
  }

4.5 Glide对Fragment生命周期监听总结

1 fragment.getContext()初始化Glide配置获取RequestManagerRetriever,如果没有配置使用默认,这个类管理了所有的生命周期监听
2 通过传进来的fragment获取FragmentManager(fragment.getChildFragmentManager()),设置一个不显示的Fragment用于监听生命周期
3 将RequestManagerFragment和RequestManager绑定,返回requestManager
4 监听生命周期回调,是在创建RequestManager的时候

4.6 Glide对View生命周期的监听

调用Glide.with(view); 通过view的Context,创建RequestManagerRetriever

Glide.java

  @NonNull
  public static RequestManager with(@NonNull View view) {
    return getRetriever(view.getContext()).get(view);
  }

RequestManagerRetriever.java

 public RequestManager get(@NonNull View view) {
    if (Util.isOnBackgroundThread()) {
  	  //如果是子线程获取全局的context 
      return get(view.getContext().getApplicationContext());
    }

    Preconditions.checkNotNull(view);
    Preconditions.checkNotNull(
        view.getContext(), "Unable to obtain a request manager for a view without a Context");
  	//通过View的Context获取Activity
    Activity activity = findActivity(view.getContext());
    // The view might be somewhere else, like a service.
    if (activity == null) {
  	  //如果Activity是null那么通过全局的Context创建requestmanager
      return get(view.getContext().getApplicationContext());
    }

    // Support Fragments.
    // Although the user might have non-support Fragments attached to FragmentActivity, searching
    // for non-support Fragments is so expensive pre O and that should be rare enough that we
    // prefer to just fall back to the Activity directly.
  	//如果是FragmentActivity获取Activity中的所有的Fragment,如果View存在在Fragment中返回Fragment,如果不存在返回FragmentActivity
    if (activity instanceof FragmentActivity) {
      Fragment fragment = findSupportFragment(view, (FragmentActivity) activity);
  	  //创建requestmanager
      return fragment != null ? get(fragment) : get((FragmentActivity) activity);
    }

    // Standard Fragments.
    //如果是Activity获取Activity中的所有的Fragment,如果View存在在Fragment中返回Fragment,如果不存在返回Activity
    android.app.Fragment fragment = findFragment(view, activity);
    if (fragment == null) {
      //创建requestmanager
      return get(activity);
    }
  	//创建requestmanager
    return get(fragment);
  }
RequestManagerRetriever.java  
  
  @Nullable
  private static Activity findActivity(@NonNull Context context) {
    if (context instanceof Activity) {
      return (Activity) context;
    } else if (context instanceof ContextWrapper) {
      return findActivity(((ContextWrapper) context).getBaseContext());
    } else {
      return null;
    }
  }

4.7 Glide对View生命周期监听总结

1 view.getContext()初始化Glide配置获取RequestManagerRetriever,如果没有配置使用默认,这个类管理了所有的生命周期监听
2 根据View的Context类型不同分别处理,如果不是Activity难么返回全局context创建的requestmanager,如果View在Fragment中返回Fragment创建的requestmanager,否则返回Actcity创建的requestmanager

4.8 Glide对全局Context生命周期监听

Glide.with(fragmentActivity), 通过Context获取Glide配置RequestManagerRetriever,会调用到

RequestManagerRetriever.java
  
public RequestManager get(@NonNull Context context) {
    if (context == null) {
      throw new IllegalArgumentException("You cannot start a load on a null Context");
    } else if (Util.isOnMainThread() && !(context instanceof Application)) {
      if (context instanceof FragmentActivity) {
        return get((FragmentActivity) context);
      } else if (context instanceof Activity) {
        return get((Activity) context);
      } else if (context instanceof ContextWrapper
          // Only unwrap a ContextWrapper if the baseContext has a non-null application context.
          // Context#createPackageContext may return a Context without an Application instance,
          // in which case a ContextWrapper may be used to attach one.
          && ((ContextWrapper) context).getBaseContext().getApplicationContext() != null) {
        return get(((ContextWrapper) context).getBaseContext());
      }
    }
	//这里处理全局的reqquestManager
    return getApplicationManager(context);
  }
 RequestManagerRetriever.java
 
 private RequestManager getApplicationManager(@NonNull Context context) {
    // Either an application context or we're on a background thread.
    if (applicationManager == null) {
      synchronized (this) {
        if (applicationManager == null) {
          // Normally pause/resume is taken care of by the fragment we add to the fragment or
          // activity. However, in this case since the manager attached to the application will not
          // receive lifecycle events, we must force the manager to start resumed using
          // ApplicationLifecycle.

          // TODO(b/27524013): Factor out this Glide.get() call.
 		  //获取全局配置
          Glide glide = Glide.get(context.getApplicationContext());
  		  //通过工厂方法创建RequestManager
          applicationManager =
              factory.build(
                  glide,
                  new ApplicationLifecycle(),
                  new EmptyRequestManagerTreeNode(),
                  context.getApplicationContext());
        }
      }
    }
    return applicationManager;
  }

全局的生命周期

ApplicationLifecycle.java
  
class ApplicationLifecycle implements Lifecycle {
  @Override
  public void addListener(@NonNull LifecycleListener listener) {
    listener.onStart();
  }

  @Override
  public void removeListener(@NonNull LifecycleListener listener) {
    // Do nothing.
  }
}

五、Glide监听到生命周期后的回调

5.1 onStart() 恢复请求,目标显示

RequestManager.java  
  
/**
   * Lifecycle callback that registers for connectivity events (if the
   * android.permission.ACCESS_NETWORK_STATE permission is present) and restarts failed or paused
   * requests.
   */
  @Override
  public synchronized void onStart() {
  	//恢复请求
    resumeRequests();
  	//恢复显示
    targetTracker.onStart();
  }

resumeRequests(); 恢复暂停的请求

RequestManager.java  
  
 /**
   * Restarts any loads that have not yet completed.
   *
   * @see #isPaused()
   * @see #pauseRequests()
   */
  public synchronized void resumeRequests() {
  	//requestTracker负责管理请求
    requestTracker.resumeRequests();
  }

targetTracker.onStart();负责管理目标显示

 RequestManager.java  
 
  @Override
  public void onStart() {
    for (Target<?> target : Util.getSnapshot(targets)) {
      target.onStart();
    }
  } 

5.1 onStop() 暂停请求,暂停显示

RequestManager.java  

 /**
   * Lifecycle callback that unregisters for connectivity events (if the
   * android.permission.ACCESS_NETWORK_STATE permission is present) and pauses in progress loads.
   */
  @Override
  public synchronized void onStop() {
	//暂停网络请你去
    pauseRequests();
	//目标显示停止
    targetTracker.onStop();
  }

5.3 onDestroy()

RequestManager.java 
 
@Override
  public synchronized void onDestroy() {
	//目标销毁
    targetTracker.onDestroy();
	//清空
    for (Target<?> target : targetTracker.getAll()) {
      clear(target);
    }
    targetTracker.clear();
  	//清空请求
    requestTracker.clearRequests();
  	//移除生命周期监听
    lifecycle.removeListener(this);
  	//移除连接监听
    lifecycle.removeListener(connectivityMonitor);
  	//移除线程runnable
    mainHandler.removeCallbacks(addSelfToLifecycle);
  	//解除RequestManager
    glide.unregisterRequestManager(this);
  }