13

我在我的 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)

无论如何要取消活动销毁时的图像下载请求。

4

5 回答 5

7

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

于 2015-09-01T22:38:55.847 回答
4

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

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

于 2014-09-15T16:00:16.307 回答
3

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

于 2016-03-22T10:18:46.183 回答
0

在 Glade 调用之前添加这个

if(!this.isDestroyed()){
   Glide.with(activity).load(...)
   ....
}
于 2017-05-25T07:59:08.030 回答
0

view确保在方法开始时清除您的onBindViewHolder。就这样。

@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);

 .
 .
 .
}
于 2021-06-12T17:58:15.997 回答