Неверное изображение, отображаемое с помощью библиотеки 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)

В любом случае, чтобы отменить запрос загрузки изображения при уничтожении активности.

Ответ 1

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

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

Ответ 2

Glide.clear() иногда не помогает мне. Передайте контекст приложения в Glide.with(...) с помощью метода getApplicationContext().

Ответ 3

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

Ответ 4

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

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