1.Fresco加载Gif
Fresco加载Gif会导致线程频繁GC,内存曲线波动比较大
至于为什么Fresco加载GIF会导致大量GC
https://www.jianshu.com/p/48ef2ca5cdae
解释一句是因为Fresco的缓存了太多的图片,并且占用的是BitmapMemory,会导致内存暴增。
2.Glide加载Gif
Glide加载网络的GIF也是比较简单
Glide.with(this) .asGif() .load(figureUrl) .into(mBinding.aiGirlLayout.girlGifSdv);
与普通的加载不同的也只是多一行asGif。
从上图上可以看到虽然是内存比较平稳也没有频繁GC,但是可以看到也是创建大量的Bitmap对象,但是相较于Fresco内存上会比少150M。
但是不管是使用Fresco与Glide加载GIF都要进行停止动画操作,不然会导致内存无法释放。
使用Glide停止动画操作
if (mBinding.aiGirlLayout.girlGifSdv.getDrawable() != null) { Drawable drawable = mBinding.aiGirlLayout.girlGifSdv.getDrawable(); if (drawable instanceof GifDrawable){ GifDrawable drawable1 = (GifDrawable)drawable; if (drawable1.isRunning()) { drawable1.stop(); } } }
使用android-gif-drawable与上面两种不同的是加载本地的图片与下载到本地Uri
https://github.com/koral--/android-gif-drawablehttps://github.com/koral--/android-gif-drawable是不支持网路图片直接进行加载
我这边没有实现进行对比,此篇文章可以看到对比差异