我们把这份 Trace 上的 cpu 部分全选,然后下面按照 Wall Duration 排序,可以发现网易新闻后台动画执行时间最长。应用已经在后台且不可见的时候,还在这么频繁地工作,占用 CPU 资源,消耗电量,实在是不应该。

抓对应的 MethodTrace 来看,就是在做动画,没有进行关闭 ,动画依旧在每一帧进行 onAnimationUpdate 的回调 ,可以看到这里是因为使用了 Airbnb 的 [Lottie](() 库导致的,动画没有关闭,所以还是一直在做触发

[](()实例 - QQ音乐
启动 QQ 音乐,然后回到桌面, 左右滑动桌面并抓取 Systrace 和 MethodTrace ,可以看到跟上面的网易新闻的表现一致
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eaXZrTK6-1599053611649)(https://upload-images.jianshu.io/upload_images/24099992-503389e0f643a07a.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
抓取了 QQ 音乐的后台动画时候的 MethodTrace 发现,也是由于退到后台之后,没有暂停动画导致的,也是 Airbnb 的 [Lottie](() 的锅, 而且 QQ 音乐有三个动画没有停止,比网易新闻还要严重一些

本文探讨了Android应用在后台时,由于未正确关闭动画导致的CPU资源浪费和电量消耗问题。通过Systrace和MethodTrace分析,指出Lottie库在应用不可见后未暂停动画是主要原因,以网易新闻和QQ音乐为例。建议开发者在应用不可见时暂停动画,如Lottie用户可覆盖onVisibilityChanged方法来优化。
最低0.47元/天 解锁文章
805

被折叠的 条评论
为什么被折叠?



