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

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


person Manish    schedule 13.09.2014    source источник
comment
Я решил использовать picasso вместо glide. Проверьте здесь   -  person Steve    schedule 23.08.2016


Ответы (5)


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

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

person Sam Judd    schedule 15.09.2014
comment
Привет, я использую Glide.with(context).load(imageUrl).animate(R.anim.fade_in).into(imageView); для загрузки изображения. Он загружается макетом элемента списка с использованием адаптера списка. - person Manish; 16.09.2014
comment
В Glide v4 это: Glide.with(fragment).clear(target) (см. руководство по миграции) - person Incinerator; 16.10.2017

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

person user2028928    schedule 01.09.2015
comment
В моем случае это было при повороте экрана. Ваше предложение помогло мне. Спасибо. - person Sermilion; 05.02.2017

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

person AnswerZhao    schedule 22.03.2016

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

if(!this.isDestroyed()){
   Glide.with(activity).load(...)
   ....
}
person Ivan Cabral    schedule 25.05.2017
comment
Хотя этот код может ответить на вопрос, предоставляя дополнительный контекст относительно как и/или почему это решает проблему, повысит ценность ответа в долгосрочной перспективе. Помните, что вы отвечаете на вопрос читателей в будущем, а не только того, кто задает сейчас! Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение и указать, какие ограничения и предположения применяются. Также не помешает упомянуть, почему этот ответ более уместен, чем другие. - person Dev-iL; 25.05.2017

Убедитесь, что вы очистили свой 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);

 .
 .
 .
}
person israel timothy    schedule 12.06.2021