Неверное изображение, отображаемое с помощью библиотеки Glide


Я использую библиотеку glide в своем проекте android для извлечения и отображения изображений. Ранее я использовал версию 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)

Есть ли вообще отменить запрос загрузки изображения на activity destroy.

4 12

4 ответа:

Вы всегда можете использовать Glide.clear() чтобы отменить нагрузку.

Однако это исключение возникает, когда вы пытаетесь запустить новую загрузку после того, как ваша активность была уничтожена. Вы начинаете загружать изображения после асинхронной выборки некоторых данных? Если это так, вы, вероятно, хотите отменить асинхронную выборку, когда ваша активность остановлена, или, по крайней мере, игнорировать результат, если выборка завершается и ваша активность уничтожается.

Скольжение.clear() иногда не помогает мне. Пройти контекста приложения, чтобы скользить.с(...) с помощью метода getApplicationContext ().

Вы должны вызвать Glide.with(getActivity()).pauseRequests() или Glide.get(getActivity()).clearMemory() в методе onDestroy() или onDestroyView(), просто удалите его.

Добавьте это перед вызовом Glade

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