Glide: You cannot start a load for a destroyed activity

FATAL EXCEPTION: main
 Process: com.houkew.displayad, PID: 3279
 java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity
 at com.bumptech.glide.manager.RequestManagerRetriever.assertNotDestroyed(RequestManagerRetriever.java:284)
 at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:124)
 at com.bumptech.glide.Glide.with(Glide.java:577)
 at com.houkew.displayad.activity.MainActivity.showNext(MainActivity.java:408)
 at com.houkew.displayad.activity.MainActivity.access$400(MainActivity.java:51)
 at com.houkew.displayad.activity.MainActivity$2$1.run(MainActivity.java:87)
 at android.os.Handler.handleCallback(Handler.java:733)
 at android.os.Handler.dispatchMessage(Handler.java:95)
 at android.os.Looper.loop(Looper.java:136)
 at android.app.ActivityThread.main(ActivityThread.java:5019)
 at java.lang.reflect.Method.invokeNative(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:515)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
 at dalvik.system.NativeStart.main(Native Method)

问题解决:

步骤一:找到异常抛出的位置

我们很容易就看到源码Glide类里面有6个重载Glide.with()的方法,分别是:

    Glide.with(Context)

    Glide.with(View)

    Glide.with(FragmentActivty)

    Glide.with(FragmentActivty)

    Glide.with(android.app.Fragment)

    Glide.with(android.support.v4.app.Fragment)

这些方法都有一个共同的返回值类型:RequestManager,并且都是通过调RequestManager类的get方法获取RequestManager对象,在RequestManager类里面的找到了抛出该异常的一个方法:

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private static void assertNotDestroyed(Activity activity) {
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && activity.isDestroyed()) {
    throw new IllegalArgumentException("You cannot start a load for a destroyed activity");
  }
}

根据这个方法定义的异常规则,我们在Activity里面使用的时候,添加已成同样的判断,问题就可以解决了:

1、载入图片:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1&&!MainActivity.this.isDestroyed()) {
    Glide.with(MainActivity.this).load(imageUrl).into(imageView);
}

2、退出Activity:

@Override
protected void onDestroy() {
    super.onDestroy();
   
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1&&!this.isDestroyed()) {
        Glide.with(this).pauseRequests();
    }
}


猜你喜欢

转载自blog.csdn.net/eesc55/article/details/80213549