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)