美文网首页源码解读Android开发
Glide源码分析:感知生命周期的艺术

Glide源码分析:感知生命周期的艺术

作者: linheimx | 来源:发表于2016-12-26 16:03 被阅读104次

    前言

    在App中,和用户交互的主要是Activity和Fragment,在交互的过程中,我们需要执行各种各样的任务。

    1. 好的任务的管理需要关注组件的生命周期。举个例子:在生命周期开始的时候,我们要启动任务的执行,在生命周期结束的时候,我们要停止任务的执行,这样可以很好的节约系统资源。
    2. 不好的任务的管理基本上不去关注生命周期,这样比较严重的浪费系统资源,给用户带来很不好的体验 :(

    所以我们在对任务的管理上要着重考虑 Activity和Fragment 的生命周期。

    如何去获取Activity和Fragment生命周期?

    问题:
    Activity和Fragment都是我们自己实现的,外在的框架如何知道Activity和Fragment的生命周期?
    回答:
    可行的方式是:

    1. 我们主动去告诉这些框架当前Activity和Fragment的生命周期,如在onCreate,在onDestroy的时候去告诉框架,我开始了,我结束了。但是这样很不友好:增加了代码量,也容易忘记告诉框架Activity和Fragment的生命周期。
    2. 让框架主动去获取当前 Activity和Fragment的生命周期,这样我们就非常轻松啦。Glide就是去主动获取当前Activity和Fragment的生命周期的。

    Glide主动获取当前Activity和Fragment的生命周期

    Glide为你当前Activity和Fragment生一个孩子,这个孩子跟你的Activity和Fragment的生死存亡。利用这个孩子,Glide轻易掌握其生命周期。

    如何实现?看代码吧:

    Glide加载图片的代码:

     Glide.with(this)
                    .load(_url)
                    .fitCenter()
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .placeholder(R.drawable.loading)
                    .into(_iv);
    

    Glide.with(this)将当前Activity和Fragment的实例传入进去。

    Activity和Fragment的实例交给RequestManagerRetriever来处理。我们继续看它是如何处理的:

    将一个fragment:SupportRequestManagerFragment加入到你的Activity或者Fragment。这个SupportRequestManagerFragment的生命周期与你的你的Activity或者Fragment完美贴合。

    代码实现:


    getSupportRequestManagerFragment(fm):


    孩子 SupportRequestManagerFragment

    他是一个fragment:


    它有以下特色:

    1. 没有view,也就是没有界面。
    2. 它持有一个RequestManager,在适当的时候调用其方法。(系统内存紧张的时候)
    3. 明确的生命周期调用,也就是把生命周期告诉某些人,某些组件,让他们来做相关的事情。(告诉RequestManager)

    相关文章

      网友评论

      • HelloFei:?
        linheimx:@黑白骑士 正在看代码,这两天就把坑给填上。

      本文标题:Glide源码分析:感知生命周期的艺术

      本文链接:https://www.haomeiwen.com/subject/jxijvttx.html