Высокая загрузка ЦП при воспроизведении GIF-файлов

Я показываю GIF-файлы в RecyclerView. Код:

Glide.with(acitivity)
  .load(url)
  .placeholder(R.drawable.image_placeholder)
  .diskCacheStrategy(DiskCacheStrategy.SOURCE)
  .listener(listener)
  .into(viewHolder.imageView);

Если я оставлю фрагмент, содержащий этот RecyclerView, открытым, приложение будет использовать очень большое количество ЦП (~ 40%). И телефон нагревается, если использую Фрагмент 1-2 минуты. Это нормально для GIF? Я делаю что-то не так здесь?


person Prashant Borde    schedule 04.03.2016    source источник
comment
Вы должны открыть профилировщик производительности в студии Android и посмотреть, что происходит, возможно, systrace может помочь.   -  person JoxTraex    schedule 04.03.2016
comment
Профилировщик производительности показывает наибольшее количество вызовов для: android.view.Choreographer$FrameDisplayEventReceiver.run android.view.Choreographer.doFrame android.view.Choreographer.doCallbacks android.view.Choreographer$CallbackRecord.run android.view.ViewRootImpl$TraversalRunnable.run android.view.ViewRootImpl.doTraversal android.view.ViewRootImpl.performTraversals android.view.ViewRootImpl.performDraw android.view.ViewRootImpl.draw android.view.ThreadedRenderer.draw   -  person Prashant Borde    schedule 04.03.2016
comment
попробуйте использовать fresco от facebook, это хорошая библиотека.   -  person UMESH0492    schedule 04.03.2016
comment
Что ж, я думаю, этого можно было бы ожидать потенциально, поскольку gif — это просто набор изображений, которые воспроизводятся в течение определенного времени. Если у вас рендерятся большие кадры, этого вполне можно ожидать, поскольку загрузка изображений и видео радикально отличается с точки зрения производительности.   -  person JoxTraex    schedule 05.03.2016
comment
Да. проверил с участниками glide и получил аналогичный ответ.   -  person Prashant Borde    schedule 05.03.2016


Ответы (1)


Получил ответ от участников Glide на Github. Вот что они говорят -

Высокая загрузка процессора — это нормально. Glide делает это, чтобы сохранить память и, в конечном итоге, злые исключения OOM.

Предложения -

  1. Используйте статическое Bitmap изображение для предварительного просмотра, избегайте автоматического воспроизведения.
  2. Использовать тайм-аут или setLoopCount на GlideDrawable/GifDrawable

Подробнее: https://github.com/bumptech/glide/issues/1029

Редактировать:

Проверьте эту проблему, если вы используете ViewPager: https://github.com/bumptech/glide/issues/ 1028

person Prashant Borde    schedule 04.03.2016