Glide4生命周期的管理

125 阅读1分钟

调用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;
}

参照: blog.csdn.net/ethanco/art… www.jianshu.com/p/7005dbc17…