先看下现象
GIF 2020-4-29 10-16-32.gif在glide3.x升级到4.9发现 在recyclerview中播放单张gif图片 ,多张挨着滑动交替播放(同一时间只播放顶部的gif)的时候, 出现了闪烁flicker,通过GifDrawable.stop()方法暂停播放的gif还在一闪一闪的播放。
问题分析
1.该操作在3.x上没有问题,怀疑是4.9 glide的接口行为有变更
2.把原来调用GifDrawable.stop()的逻辑去掉 让多个gif同时播放,测试发现多张gif可以正常播放,侧面验证是这个GifDrawable.stop()引起的
3.找解决办法:去glide的官网找3.xdao4.x升级的行为变更说明 或者 在glide的github仓库issue中溜溜 看有没有掉过坑的;(当然对glide有深入了解的 可以撸4.9的源码 对比3.x到4.x的接口实现变更定位问题)
在glide官方文档的 常见问题 中找到了原因
微信图片_20200429104030.png可见是我们持有或者调用了glide的GifDrawable中的方法 ,导致glide的内部资源没有正常释放,重用时发生了错误;解决方法就是 去掉这些对glide内部bitmap、drawable的持有和调用即可,业务实现根据具体场景换实现方式。
附glide文档地址:http://bumptech.github.io/glide/doc/resourcereuse.html#common-errors
中文翻译(非官方)地址:
https://muyangmin.github.io/glide-docs-cn/doc/resourcereuse.html
网友评论