前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Glide v3.7源码分析(1)-----Glide.with()

Glide v3.7源码分析(1)-----Glide.with()

作者头像
曾大稳
发布2018-09-11 10:49:52
5090
发布2018-09-11 10:49:52
举报
文章被收录于专栏:曾大稳的博客曾大稳的博客

Glide.with()

代码语言:javascript
复制
public static RequestManager with(FragmentActivity activity) {
        //单例拿到一个RequestManagerRetriever
        RequestManagerRetriever retriever = RequestManagerRetriever.get();
        return retriever.get(activity);
} 



public RequestManager get(FragmentActivity activity) {
        if (Util.isOnBackgroundThread()) {
            return get(activity.getApplicationContext());
        } else {
            assertNotDestroyed(activity);
            FragmentManager fm = activity.getSupportFragmentManager();
            return supportFragmentGet(activity, fm);
        }
}


RequestManager supportFragmentGet(Context context, FragmentManager fm) {
        //根据TAG拿到SupportRequestManagerFragment  防止第二次重复创建
        SupportRequestManagerFragment current = getSupportRequestManagerFragment(fm);
        //拿到RequestManager
        RequestManager requestManager = current.getRequestManager();
        if (requestManager == null) {
            requestManager = new RequestManager(context, current.getLifecycle(), current.getRequestManagerTreeNode());
            current.setRequestManager(requestManager);
        }
        return requestManager;
}


SupportRequestManagerFragment getSupportRequestManagerFragment(final FragmentManager fm) {
        SupportRequestManagerFragment current = (SupportRequestManagerFragment) fm.findFragmentByTag(FRAGMENT_TAG);
        if (current == null) {
            current = pendingSupportRequestManagerFragments.get(fm);
            if (current == null) {
                current = new SupportRequestManagerFragment();
                pendingSupportRequestManagerFragments.put(fm, current);
                fm.beginTransaction().add(current, FRAGMENT_TAG).commitAllowingStateLoss();
                handler.obtainMessage(ID_REMOVE_SUPPORT_FRAGMENT_MANAGER, fm).sendToTarget();
            }
        }
        return current;
}


public class RequestManager implements LifecycleListener {
    private final Context context;
    private final Lifecycle lifecycle;
    private final RequestManagerTreeNode treeNode;
    private final RequestTracker requestTracker;
    private final Glide glide;
    private final OptionsApplier optionsApplier;
    private DefaultOptions options;

    //RequestManager初始化
    public RequestManager(Context context, Lifecycle lifecycle, RequestManagerTreeNode treeNode) {
        this(context, lifecycle, treeNode, new RequestTracker(), new ConnectivityMonitorFactory());
    }

    RequestManager(Context context, final Lifecycle lifecycle, RequestManagerTreeNode treeNode,
            RequestTracker requestTracker, ConnectivityMonitorFactory factory) {
        this.context = context.getApplicationContext();
        this.lifecycle = lifecycle;
        this.treeNode = treeNode;
        this.requestTracker = requestTracker;
        this.glide = Glide.get(context);
        this.optionsApplier = new OptionsApplier();

        ConnectivityMonitor connectivityMonitor = factory.build(context,
                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()) {
            new Handler(Looper.getMainLooper()).post(new Runnable() {
                @Override
                public void run() {
                    lifecycle.addListener(RequestManager.this);
                }
            });
        } else {
            lifecycle.addListener(this);
        }
        lifecycle.addListener(connectivityMonitor);
    }
    //...
}
Glide.with()
Glide.with()

总结:

  1. 创建一个Fragment绑定到Activity上面,Fragment调用setRequestManager()进行RequestManager赋值。
  2. Fragment的作用是用于生命周期管理,当我们new Fragment的时候我们一同会new一个ActivityFragmentLifecycle
  3. Frament onLowMemory的时候RequestManager会回调onLowMemory回调。
  4. ActivityFragmentLifecycle是使用观察者模式来管理LifecycleListener,当fragment触发生命周期的时候(onStart onStop onDestroy),ActivityFragmentLifecycle将会进行遍历回调。 RequestManager是一个LifecycleListener,当初始化的时候,RequestManager将会被注册到Fragent里面的ActivityFragmentLifecycle进行生命管理。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档