播放GIF时CPU占用率高

4

我正在RecyclerView中显示GIF图像。 代码:

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

如果我保持包含此RecyclerView的碎片打开,应用程序将使用非常高的CPU(约40%)。如果我使用该碎片1-2分钟,手机会发热。对于GIF图像来说这是正常的吗?我在这里做错了什么吗?

你应该在Android Studio中打开性能分析器,查看发生了什么,也许systrace可以帮助。 - JoxTraex
性能分析器显示以下调用次数最高的内容: 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 - Prashant Borde
尝试使用Facebook的Fresco库,它是一个很好的库。 - UMESH0492
1
我想这可能是可以预料的,因为 GIF 只是一系列随时间播放的图像集合。如果正在渲染大型帧,则可以预期加载图像与视频在性能方面存在根本差异。 - JoxTraex
是的。已与Glide贡献者进行了核对,并获得了类似的回复。 - Prashant Borde
1个回答

3

从Github上得到了Glide贡献者的回复。以下是他们的说法 -

高CPU使用率是正常现象。Glide之所以这样做是为了节省内存,并最终避免臭名昭著的OOM异常。

建议 -

  1. 使用静态的Bitmap图像进行预览,避免自动播放。
  2. GlideDrawable/GifDrawable上使用超时或setLoopCount

更多信息请参见:https://github.com/bumptech/glide/issues/1029

编辑:

如果您正在使用ViewPager,请查看此问题:https://github.com/bumptech/glide/issues/1028


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接