调用Glide.with()时会执行RequestManagerRetriever.fragmentGet(),其中会通过getRequestManagerFragment()在activity中添加一个无UI的Fragment,然后设置一个RequestManager对象。在Fragment关键生命周期,通过Lifecycle通知RequestManager管理资源对象,在onStart继续加载,onStop暂停加载,onDestroy停止加载任务和进行清除操作。
glide/library/src/main/java/com/bumptech/glide/manager/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);
RequestManager requestManager = current.getRequestManager();
if (requestManager == null) {
// TODO(b/27524013): Factor out this Glide.get() call.
Glide glide = Glide.get(context);
requestManager =
factory.build(
glide, current.getGlideLifecycle(), current.getRequestManagerTreeNode(), context);
// This is a bit of hack, we're going to start the RequestManager, but not the
// corresponding Lifecycle. It's safe to start the RequestManager, but starting the
// Lifecycle might trigger memory leaks. See b/154405040
if (isParentVisible) {
requestManager.onStart();
}
current.setRequestManager(requestManager);
}
return requestManager;
}