Android Glide Error:You cannot start a load for a destroyed activity

Android Glide Error:You cannot start a load for a destroyed activity

我正在使用 glide 查看从我的 activity 数据库中获取的 url 图像,我正在删除 activity 中的图像,在删除下一个 [=19] 之后=] 将被打开,但第一次删除图像时没有任何错误,第二次如果打开并按删除我收到此错误:

java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity

这是我删除图片的代码:

alert.setNegativeButton("Delete", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(final DialogInterface dialogInterface, final int i) {
                    try {
                        final Query postRef = ref.child("Pendingevents").orderByChild("Eventtitle").equalTo(Title);


                        postRef.addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(DataSnapshot dataSnapshot) {

                                for (DataSnapshot child : dataSnapshot.getChildren()) {
                                    child.getRef().removeValue();

                                    Toast.makeText(getApplicationContext(), "Event Deleted", Toast.LENGTH_SHORT).show();

                                    Intent intent=new Intent(getApplicationContext(),PendingEvents.class);
                                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                    startActivity(intent);
                                }


                            }

                            @Override
                            public void onCancelled(DatabaseError firebaseError) {

                            }
                        });

                    }catch (Exception e)
                    {
                        Toast.makeText(ApproveEvents.this, "Unknown      Error,please Try Again", Toast.LENGTH_SHORT).show();
                    }
                }
            });
            AlertDialog build=alert.create();
            build.show();
        }
    });

Logcat:

java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity
                                                                              at com.a.a.e.o.b(Unknown Source)
                                                                              at com.a.a.e.o.a(Unknown Source)
                                                                              at com.a.a.f.a(Unknown Source)
                                                                              at bootcamplearning.humanplanet.u.a(Unknown Source)
                                                                              at com.google.android.gms.b.ol.a(Unknown Source)
                                                                              at com.google.android.gms.b.qh.b(Unknown Source)
                                                                              at com.google.android.gms.b.qn.run(Unknown Source)
                                                                              at android.os.Handler.handleCallback(Handler.java:739)
                                                                              at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                              at android.os.Looper.loop(Looper.java:135)
                                                                              at android.app.ActivityThread.main(ActivityThread.java:5294)
                                                                              at java.lang.reflect.Method.invoke(Native Method)
                                                                              at java.lang.reflect.Method.invoke(Method.java:372)
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)

更新

最好不要使用 post 底部描述的方法。

主要思想是 Glide 关注它工作的元素的生命周期。如果 FragmentActivity 将被销毁,Glide 将完成其图像处理工作。 Here is a detailed discussion of the issue.

总而言之,在调用 load 从某些 AsyncTask 或其他线程返回之前,您应该检查您的 activity 是否还活着:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && someActivity.isDestroyed()) {
    return;
} else {
    Glide.with(someActivity)
          .load(imageUrl)
          ....;
}

解决方法,不推荐,因为如果Activity被销毁会导致一些不必要的处理。但它易于使用并发挥作用。

Glide.with(context) 中尝试传递应用程序上下文而不是 Activity。在这种情况下,你不应该依赖于 Activity 生命周期。

例如,在 activity 中,您可以使用:

 Glide.with(getApplicationContext())
      .load(imageUrl)
      .into(yourImageView);

或者在 framgent 中:

 Glide.with(getActivity().getApplicationContext())
      .load(imageUrl)
      .into(yourImageView);

在片段中,使用:

if(getActivity !=null) {
  Glide.with(getActivity())
    .load(imageUrl)
    .into(yourImageView);
}