美文网首页
Glide使用的生命周期管理之上下文Context

Glide使用的生命周期管理之上下文Context

作者: 向上_d821 | 来源:发表于2020-08-26 16:50 被阅读0次

    Glide最简单的使用

    Glide.with(context)
        .load("http://xxx")
        .into(imageView);
    

    Glide提供了许多.with()方法,原因如下:它遵循生命周期.
    但是with的参数上下文使用需要注意,以避免任何崩溃,会对应用程序和内存的性能产生影响。

    生命周期集成

    建议:将Activity/Fragment作为上下文当做with()的参数。

    图片加载会和Activity/Fragment的生命周期保持一致并且和控件imageView的生命周期也保持一致。
    这样Glide请求会在onStop的时候自动暂停,在onStart的时候重新启动,gif的动画也会在onStop的时候停止,以免在后台消耗电量。
    如果你使用getApplicationContext()作为上下文的话,会有问题,它的生命周期是整个应用,应用摧毁它才摧毁。假设你在activity或者fragment里面启动了很大图像的Glide加载.现在,如果用户按下后退按钮或整个活动已关闭,这个时候所有大图片的数据都被下载然后被解码,缓存,甚至可能被设置为ImageView,然后被垃圾收集,,因为它的唯一引用是来自Glide internals.

    一、

    如果你使用((Fragment)this)Glide或((getContext())Glide订阅Fragment的生命周期事件,一旦Fragment停止,任何未完成的请求应该暂停;当销毁时,所有待处理的请求都将被清除.这意味着图像下载将在中途停止,并且该死片段将不再使用更多资源.

    二、

    如果你使用(getActivity())Glide订阅Activity的生命周期事件,同样的事情发生在上面,但只有当Activity被停止或销毁时.

    总结:

    最佳做法是使用最接近的可能上下文/片段来避免未使用的请求完成! 要在实践中应用它,尽可能尝试使用(this),

    还有一种手动停止加载的方法:
    Glide.clear(ImageView | Target)
    

    相关文章

      网友评论

          本文标题:Glide使用的生命周期管理之上下文Context

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