问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

记录lottie动画踩坑(内存泄漏、帧误差、销毁方式)

发布网友 发布时间:2024-10-02 18:22

我来回答

1个回答

热心网友 时间:2024-10-18 07:51

1.内存泄露

我测试的是AE文件导出的lottie文件(单个动画对象包含3个蒙版,3-5个元素,无渐变颜色,动画时长1s。一共有3-4个这样的动画对象),这样的动画如果不对lottie生成的对象进行销毁的话,经过测试存在内存泄露问题,不使用缓存机制,会导致长时间使用下,内存占用持续走高:

这里使用单实例模式,缓存anim对象的引用,可以平衡内存的使用。

??//?Singleton??if?(anim)?{????anim.doSth();??}?else?{????anim?=?lottie.loadAnimation(data);??}

结果如图,没有内存占用持续走高的现象发生:

2.帧误差?

在调用,anim.play()方法后,动画会从第0帧执行到最后一帧停止,正常情况下是不会出问题的。

但是在暴力测试下,如果频繁触发动画执行,会导致终点动画的结束帧有误差,比如我做的60帧的动画,在暴力测试下,会导致终点帧为59帧,如图:

这样的话,下次再执行anim.play方法时,是从第59帧执行到60帧,而不是从第0帧执行到第60帧(即replay),所以这里需要定义一个方法使其replay。?

??const?replay?=?(anim:?AnimationItem)?=>?{????if?(anim.currentFrame?!==?anim.totalFrames)?anim.goToAndStop(anim.totalFrames,?true);????anim.play();??};

3.销毁方式

这里在销毁的地方,effecthook上踩了一个坑,location会因为路由变化,重新触发effecthook。

这里需要注意,如果一个effect同时包含return函数和refs的时候,如果refs变化,那么这时return函数会执行,以清除上一次effect。

所以因为location的变化,在当前这个effecthook里,我把anim给销毁了,那么就会存在一些判断逻辑上的缺漏!!

所以最好的hook使用方式,应该是将会有相互影响的hook分开来写,创建/销毁应该清晰化去处理,这样才不会产生连串效应。

const?location?=?useLocation();?//?react?router?dom//?wrong?wayuseEffect(()?=>?{??//?add?event?listener?on?location's?change?events??//?...?deal?events??return?()?=>?{????anim?&&?anim.destroy()??}},?[location])//?correct?wayuseEffect(()?=>?{??//?add?event?listener?on?location's?change?events??//?...?deal?events},?[location])useEffect(()?=>?{??return?()?=>?{????anim?&&?anim.destroy()??}},?[])

4.结束语

如果觉得写的不错,有用的话,还请帮我点个赞O(∩_∩)O

转发请注明出处,谢谢!

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
中支黄金叶什么价 怎么在整个PPT中加入背景音乐,而不是在一张幻灯片中插入,我要的是从... 构造柱有哪些构造措施 中国风的女式花裤配什么鞋 留抵抵税额是什么意思 留抵税抵什么意思 ...里发现很多门店装修和华为一样的,但是官网查不到,这种店铺购买... 墙布贴了关窗多久 墙布贴了要关窗多久 墙布贴好要多久密闭多久 山水蓝牙耳机质量好不好? 国家农村独生女补贴政策 ae 无法渲染大尺寸文件 怎么解决呢 我是山西临汾妹子,无意间看了你的回答,想问问你办低保的具体步骤,我... 电风扇扇叶一般都是什么 细说中茶普洱红印、黄印、绿印、蓝印的含义 红印、黄印、绿印、蓝印、紫印的含义 现在的人怎么都这么喜欢华而不实的东西,有必要买这么贵的? 华而不实的东西,人为什么还要去拼命的去追求?难道是虚荣心?虚荣心真的... ...刮掉漆了,想用补漆笔补下,我刮这样还能补吗? ...的地方我直接补漆笔点了下,不会自己扩大吧? ...可以自己买点原子灰腻子刮上,再用补漆笔吗? 车门上被别人开车的时候磕掉了点漆,能用补漆笔补下吗 车门上有一点点掉漆? 车门上让人刮了,漏铁了能用补漆笔吗 黑珠、白珠共188个,串成一串,排列如下图:黑白白白黑白白白黑白白白... lol闪退怎么办,选英雄的时候都有时候会突然关闭游戏,用的是WIN7 32位... 请问车门边上掉了一点漆,目测已经生锈了!现在用补漆笔行吗? ...所示,黑珠白珠共86个图:一个黑珠一个白珠三个黑珠一个白珠三个黑珠... 玩LOL的时候刚选完 英雄就自动退出是怎么回事 AE中时间长短怎么设置? ...双耳耳塞式蓝牙耳机,山水和纽曼大咖们更推荐哪个?哪个音质更好?_百 ... 山水和库曼的蓝牙耳机哪个好?性价比高? 山水123 和125建议购买哪一个... 反复试探的男人是什么心理? 如何对付喜欢反复试探你的男人? ...手机玩熟练,感觉真的很笨,也都是毕业初中的人,怎么玩都学不会... 我有微信有电话,就是不会玩手机。有话说不出来? ...可是我想带,联系嘛!大不了我不玩了呗!我要怎么办? 长安铃木锋驭保养灯咋消除? 手机怎样才能登到192.168.100.1的IP上 怎么登录192.168.100.1的IP地址啊? 智行火车票车票夹如何查找 车票夹查找教程分享 请教哪位内行大哥 想入手一辆五羊本田佳颖运动版踏板车 听说现在的质量... 五羊本田佳颖大修问题 蓟县南火车站简介 2014年河南中考物理化学难吗 独石教堂是怎么回事? 地下独石教堂是怎么建造的? 拉利贝拉岩石教堂开凿工程 特立尼达耶稣会传教区建筑特点