Glide 问题 You cannot start a load for a destroyed activity

基本使用:
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).....
}

猜你喜欢

转载自blog.csdn.net/NewActivity/article/details/122704527