Android开机动画



开机动画(闪动的ANDROID字样的动画图片)
/Android 2.2版本:

surfaceflinger

SystemServer启动分为init1()init2()两个阶段,在init1阶段获取属性字段system_init.startsurfaceflinger,如果字段值为1,那么就在这里启动surfaceflinger

 //@frameworks\base\cmds\system_server\library\system_init.cpp

 

char propBuf[PROPERTY_VALUE_MAX];

property_get("system_init.startsurfaceflinger", propBuf, "1");

if (strcmp(propBuf, "1") == 0) {
 // Start the SurfaceFlinger
 SurfaceFlinger::instantiate();
 }

surfaceflinger构造函数调用readyToRun函数,至于为什么会调用readyToRun函数(并没有显式的调用语句),主要是因为surfaceflinger是一个线程类,必须实现并会调用如下两个函数:一是readyToRun(),该函数定义了线程循环前需要初始化的内容;二是threadLoop(),每个线程都必须实现,该函数定义了线程执行的内容,如果该函数返回true,线程会继续调用threadLoop(),如果返回false,线程将退出。

surfaceflinger:readyToRun函数用于初始化整个显示系统。实现过程如下

1)执行new DisplayHardware(this,dpy),通过DisplayHardware初始化FramebufferEGL并获取OpenGL ES信息。 

2)创建共享的内存控制块。 

3)将EGL与当前屏幕绑定。 

4)初始化共享内存控制块。 

5)初始化OpenGL ES。 

6)显示开机动画。

其中显示开机动画是启动init..rc中的bootanim服务,语句如下:

//@Framework\base\libs\surfaceflinger\surfaceflinger.cpp

 

property_set("ctl.start", bootanim);

停止开机动画业在surfaceflinger:bootFinished()中:

//@Framework\base\libs\surfaceflinger\surfaceflinger.cpp

 

property_set("ctl.stop", bootanim);


bootanim

相关文件:

system/core/init/init.c
system/core/rootdir/init.rc
frameworks/base/cmds/bootanimation/BootAnimation.h
frameworks/base/cmds/bootanimation/BootAnimation.cpp
frameworks/base/cmds/bootanimation/bootanimation_main.cpp

frameworks/base/core/res/assets/images/android-logo-mask.png frameworks/base/core/res/assets/images/android-logo-shine.png 


init.rc中定义服务:“service bootanim /system/bin/bootanimation”

bootanim服务由readyToRun()property_set("ctl.start", "bootanim");)执行开机动画bootFinished()property_set("ctl.stop", "bootanim");)执行停止开机动画。

 


1adb shell后,可以直接运行“bootanimation”来重新看开机动画,它会一直处于动画状态,而不会停止。
2adb shell后,命令“setprop ctl.start bootanim”执行开机动画;命令“getprop ctl.stop bootanim”停止开机动画。这两句命令分别对应SurfaceFlinger.cpp的两句语句:property_set("ctl.start", "bootanim");property_set("ctl.stop", "bootanim");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值