Glide库报错:无法在已销毁Activity中启动加载,求助解决
嘿,这个问题我碰到过好多次了!你遇到的崩溃是因为Glide的图片加载请求还在后台跑,但BlogActivity已经被销毁了,这时候Glide试图用已销毁的Activity上下文完成加载,就触发了这个IllegalArgumentException。下面是几个靠谱的解决办法:
1. 绑定Glide请求到Fragment的生命周期(最推荐)
因为你的RecyclerView是填充在Fragment里的,直接用Fragment关联的上下文来初始化Glide,而不是Activity的。这样Glide会自动感知Fragment的生命周期,当Fragment销毁时,未完成的请求会被自动取消,不会再去关联已销毁的Activity。
修改Adapter里的Glide加载代码,比如在onBindViewHolder中使用ViewHolder的View上下文(这个上下文属于Fragment):
@Override public void onBindViewHolder(BlogViewHolder holder, int position) { BlogModel item = blogList.get(position); // 用ViewHolder的itemView上下文,自动关联Fragment生命周期 Glide.with(holder.itemView.getContext()) .load(item.getImageUrl()) .into(holder.blogImage); holder.blogDesc.setText(item.getDescription()); }
2. 在Activity销毁时主动取消所有Glide请求
如果因为某些原因必须用Activity上下文,那可以在BlogActivity的onDestroy()方法里主动清空所有未完成的Glide请求:
@Override protected void onDestroy() { super.onDestroy(); // 取消当前Activity下的所有Glide请求 Glide.with(this).clearAllRequests(); }
3. 避免持有Activity的强引用
检查你的Adapter是否持有BlogActivity的强引用,如果是,改成持有Fragment的引用或者用Fragment的上下文传递给Adapter——强引用Activity不仅会导致Glide的崩溃问题,还可能引发内存泄漏。
当你关闭BlogActivity并跳转时,Activity会进入销毁流程,但Glide的异步加载请求可能还没完成。此时Glide的请求管理器还持有已销毁Activity的引用,尝试继续执行加载操作时,就会触发这个断言异常。
内容的提问来源于stack exchange,提问作者Rishiram Ranabhat

