前两篇文章介绍了系统启动动画服务的启动和准备阶段,并且我们选择了自定义动画的分支,该分支的动画播放流程主要包含一下几个阶段:
- loadAnimation:解析 zip 包的动画数据。
- playAnimation:播放解析好的纹理数据。
- releaseAnimation:播放完毕释放资源。
一、动画播放流程
1、加载动画
loadAnimation
源码位置:/frameworks/base/cmds/bootanimation/BootAnimation.cpp
BootAnimation::Animation* BootAnimation::loadAnimation(const String8& fn) {
……
// 打开提供的文件路径作为ZIP文件
ZipFileRO *zip = ZipFileRO::open(fn);
……
ALOGD("%s is loaded successfully", fn.string());
// 创建并初始化Animation对象
Animation *animation = new Animation;
animation->fileName = fn;
animation->zip = zip;
animation->clockFont.map = nullptr;
mLoadedFiles.add(animation->fileName