【问题标题】:Incorrect image rendered with Glide library使用 Glide 库渲染的图像不正确
【发布时间】:2014-11-07 12:29:00
【问题描述】:

我在我的 android 项目中使用 glide 库来获取和显示图像。 早些时候我使用的是 2.0.5 版本并面临渲染问题。问题是渲染了错误的图像。我已将库更新到 3.3 版本,它现在崩溃并出现以下异常。

14-Sep-2014 08:41:31 PM java.lang.IllegalArgumentException: 
You cannot start a load for a destroyed activity
    at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:63)
    at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:29)
    at com.bumptech.glide.Glide.with(Glide.java:537)
    at com.miamiheat.common.MHImageDownloadWrapper.loadImage(MHImageDownloadWrapper.java:12)
    at com.miamiheat.ui.module.MHWallpaperModule.setWallpaperViewData(MHWallpaperModule.java:234)
    at com.miamiheat.ui.module.MHWallpaperModule.taskManagerResponseCallback(MHWallpaperModule.java:257)
    at com.miamiheat.service.taskmanager.MHWallpaperTaskManager.asyncResultCallback(MHWallpaperTaskManager.java:133)
    at com.miamiheat.service.framework.MHAsyncServiceTask.onPostExecute(MHAsyncServiceTask.java:191)
    at android.os.AsyncTask.finish(AsyncTask.java:631)
    at android.os.AsyncTask.access$600(AsyncTask.java:177)
    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:176)
    at android.app.ActivityThread.main(ActivityThread.java:5419)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:525)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
    at dalvik.system.NativeStart.main(Native Method)

是否有取消活动销毁时的图像下载请求。

【问题讨论】:

  • 我已经解决了使用毕加索而不是滑翔。检查here

标签: android android-volley android-glide


【解决方案1】:

Glide.clear() 有时对我没有帮助。使用 getApplicationContext() 方法将应用上下文传递给 Glide.with(...)。

【讨论】:

  • 就我而言,它是在屏幕旋转上。你的建议对我有帮助。谢谢。
【解决方案2】:

您始终可以使用Glide.clear() 取消加载。

但是,当您在 Activity 被销毁后尝试开始新的加载时,就会发生该异常。您是否在异步获取一些数据后开始加载图像?如果是这样,您可能希望在活动停止时取消异步获取,或者至少在获取完成并且您的活动被破坏时忽略结果。

【讨论】:

  • 嗨,我正在使用 Glide.with(context).load(imageUrl).animate(R.anim.fade_in).into(imageView);加载图像。它正在使用列表适配器由列表项布局加载。
  • 在 Glide v4 中是:Glide.with(fragment).clear(target)(参见migration guide
【解决方案3】:

必须在方法onDestroy()onDestroyView()中调用Glide.with(getActivity()).pauseRequests()Glide.get(getActivity()).clearMemory(),删除即可。

【讨论】:

    【解决方案4】:

    在 Glade 调用之前添加这个

    if(!this.isDestroyed()){
       Glide.with(activity).load(...)
       ....
    }
    

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关 如何 和/或 为什么 解决问题的附加 context 将改善答案的长度长期价值。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人!请edit您的答案添加解释,并说明适用的限制和假设。提及为什么这个答案比其他答案更合适也没有什么坏处。
    【解决方案5】:

    确保在 onBindViewHolder 方法的开头清除 view。 就是这样。

    @Override
    public void onBindViewHolder(final Adapter_Feed_Msg.ViewHolder holder, final int position) {
    
        Glide.with(mContext).clear(holder.ProfileImage);
        Glide.with(mContext).clear(holder.postImage);
    
     .
     .
     .
    }
    

    【讨论】:

      猜你喜欢
      • 2013-04-04
      • 2019-01-25
      • 2012-11-28
      • 1970-01-01
      • 2020-04-06
      • 1970-01-01
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多