bootanimation


Bootanimation

Bootanimation是个服务,在init.rc中,通过init进程启动。 构造函数被调用。

由于继承 /system/core/libutils/Threads.cpp,在创建时会调用

readyToRun() ,即创建线程执行,找到bootanimation.zip,然后找到解析desc_zh_ui.txt/desc_zh_tv.txt/desc.txt

threadLoop() 中for循环播放动画,每次都会调用checkExit 函数中,判断property(service.bootanim.exit)值是否为1,如果1就跳出循环。开机动画完成。

 for (int r=0 ; !part.count|| r<part.count; r++)   count 为0 无限循环。

如果是已经设置了无限循环,而没有无限循环。有可能是desc.txt写的有问题。
desc.txt最后一行要加换行。

--------------------
surfaceflinger

surfaceflinger是个bin文件,在init.rc中启动,SurfaceFlinger 启动 设置property(service.bootanim.exit) 值为0。而此时开机动画已经启动,标准android会等待这个值。

在bootfinish函数中设置property(service.bootanim.exit) 值为1。

----------------------
进程启动
init.rc{
import /init.environ.rc
import /init.usb.rc
import /init.${ro.hardware}.rc  
{
import /init.mtk_common.rc
import /init.mtk_rm.rc
import /init.pre_dtv_driver.rc
import /init.dtv_driver.rc
import /init.device.rc
import /init.build_type.rc
import /init.build_cfg.rc
import /init.hybrid_cfg.rc      ->  启动 dtv_bootanimation
import /init.android_two_worlds.rc
import /init.${ro.coredump}.rc
import /init.${ro.coredump}_folder.rc
import /init.sdcard.rc 
}
import /init.trace.rc 

surfaceflinger启动 
}

----------------------
desc.txt 解析
desc.txt是动画的配置文件,保存格式为ANSI,用于设置这个动画的分辨率,帧数,播放次数,文件夹名称等;
其格式一般如下(参数用空格隔开):
480 800 10
p 1 0 part0

p 0 0 part1
480 800是指显示的分辨率 宽 高

10是帧数,就是每秒播放的图片数
p为标志符,不可修改,不必理会
p后面的数字是指播放次数, 0为循环播放, 1为播放一次
p 1 0 part0  第二个零代表动画间隔时间为0
part0 
part1 为文件夹名,名称可以自定义,只有一个文件夹也可。

大致意思就是,系统开机时就会把名为part0的文件夹内的图片按照每秒10张的速度播放一遍,然后把part1文件夹内的图片也按照每秒10张的速度循环播放,直致开机完成。
为什么要用两个文件夹呢? 一般 :part0是播放一遍的,part1是循环播放直到开机。

文件夹里的图片必须是PNG格式,图片名称按顺序排放。
--------------------


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值