基本使用:
Glide.with(context).load(imageUrl).into(imageView);
出现“You cannot start a load for a destroyed activity”情景是:
像三方服务器请求图片时,在请求网络过程中,关闭了activity,会报此错。
原因是:
主要出在context 上,因为虽然关闭了activity,但网络成功的回调执行回来后,拿到图片地址,再使用glide加载图片时,activity却已经finish了~
看glide的源码:
然后在这里抛出得异常:
就是当 activity.isDestroyed()的时候 会出现这个异常~
同样的还有另外几个异常:
You cannot start a load on a fragment before it is attached
You cannot start a load on a null Context
归根结底都是因为我们传入了一个已经销毁的Activity或者是一个空的Context ,Fragment 挂载的Activity为空导致的
回顾使用的场景,是在拿到成功回调之后调用Glide 当执行到Glide.with();方法时,当前的Activity已经销毁了,所以才导致的这个问题。
解决办法是:
在使用activity当参数传递时,
if(!this.isFinishing()) {
Glide.with(this).....
}
或
if(!this.isDestroyed()) {
Glide.with(this).....
}
当使用context 当参数传递时,
if(context !=null) {
Glide.with(context).....
}
当使用fragment当参数传递时,
if (fragment != null && fragment.getActivity() != null) {
Glide.with(fragment).....
}