我是靠谱客的博主 高大老鼠,最近开发中收集的这篇文章主要介绍解决 java.lang.IllegalArgumentException:You cannot start a load for a destroyed activity 造成的闪退问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

序 、今天周一就跟我来了一个大事故 。太 TMD 难了 。

 

报错内容

Caused by:
5 java.lang.IllegalArgumentException:You cannot start a load for a destroyed activity
6 com.bumptech.glide.b.l.c(RequestManagerRetriever.java:323)
7 com.bumptech.glide.b.l.a(RequestManagerRetriever.java:132)
8 com.bumptech.glide.b.l.a(RequestManagerRetriever.java:116)
9 com.bumptech.glide.d.c(Glide.java:707)

定位代码(Glide)

  @NonNull
  public static RequestManager with(@NonNull Context context) {
    return getRetriever(context).get(context);
  } 



 @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
  private static void assertNotDestroyed(@NonNull 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");
    }
  }

PS:报这个错的原因是 activity.isDestoryed ()  ,就是如果Glide 使用所在的 Activity 已经销毁的话 ,就会报这个错 。

 

项目代码

public class VideoLoadingDialog extends BaseDialogFragment{

    private ImageView iv_loading;


    @Override
    protected int setLayoutId() {
        return R.layout.dialog_videolaoding;
    }

    @Override
    protected void initView(View view) {
        super.initView(view);
        iv_loading = view.findViewById(R.id.iv_loading);
        Glide.with(getContext()).load(R.drawable.waiting).into(iv_loading);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if(iv_loading != null){
            Glide.with(getContext()).clear(iv_loading);
            iv_loading = null;
        }
    }
}

PS:为了解决一个内存泄漏问题 。在 DialogFragment 的 onDestory ()方法里面做了Glide 的 clear 。

 

解决方案  做一个判断 。

   @Override
    public void onDestroy() {
        super.onDestroy();
        if(iv_loading != null &&  !getActivity().isDestroyed()){
            Glide.with(getContext()).clear(iv_loading);
            iv_loading = null;
        }
    }

 

 

PS:这是一个小瑕疵  ,切记 。(以后改东西 ,一定要好好做测试 ,可能会发生你想象不到的玄幻结果)

最后

以上就是高大老鼠为你收集整理的解决 java.lang.IllegalArgumentException:You cannot start a load for a destroyed activity 造成的闪退问题的全部内容,希望文章能够帮你解决解决 java.lang.IllegalArgumentException:You cannot start a load for a destroyed activity 造成的闪退问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(25)

评论列表共有 0 条评论

立即
投稿
返回
顶部