Android系统开机动画, 是由bootanimation进程将多桢的图片按次序循环播放,在屏幕上形成的动画效果。

这里介绍一下bootanimation的原理。

1. bootanimation启动

bootanimation是一个本地进程,代码由c++编写,它由init进程启动

/init.rc

service bootanim /system/bin/bootanimation class core

user graphics

group graphics audio

disabled

oneshot

可以看到bootanimation进程的的uid是graphics, gid是graphics和audio;

并且当init在开机解析init.rc文件时,这个进程是disable的,并不启动;bootanimation进程是oneshot的,也就是只启动一次,死掉后不会再重启。

在SurfaceFlinger.cpp启动时在初始化init()函数里会调用startBootAnim()

void SurfaceFlinger::startBootAnim() {

property_set("service.bootanim.exit", "0");

property_set("ctl.start", "bootanim");

}

这里设置了两个property。

其中init进程检测到ctl.start被设成bootanim后,就会再去init.rc里找bootanim的service,

然后启动/system/bin/bootanimation进程。

2. bootanimation实现

bootanimation代码目录在frameworks/base/cmds/bootanimation/里。功能实现主要在BootAnimation.cpp文件里。需要提醒一点,从bootanimation_main.cpp里可以看到,bootanimation进程其实也加入到了binder线程池当中,只不过对于这个进程来说,并没有用binder和其它进程通信。

Bootanimation继承于Thread(), 所以bootanimation显示的主要部分在threadLoop()函数里。

bool BootAnimation::threadLoop()

{

bool r; if (mZip == NULL) {

r = android();

} else {

r = movie();

}

... ... return r;

}

mZip表示桢动画的zip文件对象,优先级依次是”/system/media/bootanimation-encrypted.zip”,

“/system/media/bootanimation-encrypted.zip”,”/system/media/bootanimation.zip”。

如果这三个文件全都不存在,就会调用android()函数,也就是”android”几个字母。

如果其中任何一个zip文件存在,则调用movie()函数,这里面会解压zip包,然后在一个while循环里显示,也就是看到的动画效果。

3. bootanimation退出

无论是”android”还是zip包,显示都是在一个死循环里,当系统启动完成之后,必须要退出bootanimation,

然后显示launcher桌面。

当Android系统启动完成发送boot_complete广播的同时,会调用SurfaceFlinger.cpp的bootFinished()函数:

void SurfaceFlinger::bootFinished()

{

... ...

property_set("service.bootanim.exit", "1");

}

在bootanimation进程的android()或者movie()里都会循环调用checkExit()函数检测“service.bootanim.exit”的值;

void BootAnimation::checkExit() { char value[PROPERTY_VALUE_MAX];

property_get("service.bootanim.exit", value, "0"); int exitnow =

atoi(value); if (exitnow) {

requestExit();

... ...

}

}

当”service.bootanim.exit”的值为1时,调用requestExit()便会通知线程需要结束,也就退出了动画播放。

至此,Android系统开机动画就结束了。

android开机动画多长时间_Android开机动画原理分析相关推荐

  1. android开机动画多长时间_Android系统开机动画的一生

    前言 在上篇文章[Android从上电到加载launcher,都发生了啥]中,简单介绍了Android系统从上电到加载launcher的流程,但比较粗略,特别是init之后,开机动画如何启动,又如何结 ...

  2. android开机动画多长时间_android开关机动画和铃声配置

    12. 分区修改 A 修改分区文件mediatek\build\tools\ptgen\partition_table.xls B 修改分区头文件mediatek\custom\project\com ...

  3. 游戏服务器维护启动需要多久,游戏服务器开机需要多长时间

    游戏服务器开机需要多长时间 内容精选 换一换 垃圾回收器是内存回收的具体实现,JDK自带的垃圾回收器已经完成集成垃圾回收和清理算法,业务程序可以通过设置参数选择垃圾回收器,虚拟机用到的7种经典的垃圾回 ...

  4. 笔记本换固态后开机慢(长时间卡在黑屏)

    关于笔记本换固态后开机慢(长时间卡在黑屏) 机型联想z485 因为机械速度慢,所以想把电脑升下级,装好了固态,加个内存条,

  5. 出现开机慢、开机黑屏长时间的进(转至卡饭论坛,帖子最早出现在爱毒霸社区论坛)之二

    本帖最后由 772844863 于 2012-3-25 12:38 编辑 事件: 近期接到不少用户向我们反馈出现开机慢.开机黑屏长时间 的问题,并且是毫无征兆的出现了 出现的问题现象包含有: 1.以前 ...

  6. Win系统 - 如何查看电脑开机了多长时间?

    方法一 在开始菜单中输入'cmd'搜索,在出现的结果中"cmd.exe"中右击,然后选择"以管理员身份运行"或者直接点击它. 也可以直接按下键盘的组合键&quo ...

  7. Android跳转动画时长,Android_Activit跳转动画之界面上某个位置并裂开上下拉伸动画跳转,需求:Activity(fragment)跳转的时候 - phpStudy...

    Activit跳转动画之界面上某个位置并裂开上下拉伸动画跳转 需求:Activity(fragment)跳转的时候当前界面裂开,上下各自拉出手机屏幕,之后跳转到相对应的Activity.整体效果图如下 ...

  8. 计算机长期不用无法开机,电脑长时间不用开机进不了系统怎么办

    1.可能是电脑受潮了,把电脑在强光下曝晒10小时,或者将主板上的电池扣下来 擦拭干净,然后按上去 这时开机启动即可. 2.打开机箱,观察显卡,CPU电源的风扇是否都正常转动,散热片上是否灰尘较多,机箱 ...

  9. Android JNI调用OpenCV,长时间运行内存异常,导致闪退的log分析和解决---(ReferenceTable overflow (max=1024)造成的)

    首先交代下问题背景,前些日子自己在android上搞了个入侵检测玩.就是camera当作监控设备,每隔一定时间检测是否有东西入侵,如果入侵率到一定程度就报警的东西.最近发现,每次运行超过20分钟,ap ...

最新文章

  1. 只用一次+ 求三个整数之和
  2. BZOJ 2742: [HEOI2012]Akai的数学作业
  3. Metal之Shading Language Specification(着色语言规范)
  4. Linux Shell常用技巧(二)
  5. ubuntu配置vnc访问
  6. Linux下编写UDP/TCP版本的服务器和客户端的流程
  7. 上帝就在机器里:复杂算法背后隐藏的可怕现实
  8. 如何在虚拟机上安装wsus服务器,如何在Hyper-V虚拟机上安装WSUS服务器技巧_Hyper-V...
  9. Linux下的iftop命令介绍
  10. python 对象转json
  11. usb万能驱动win7_我!Win7!还能接着续!Z490 B460 H410 Win7 保姆教程
  12. Windows电脑如何访问小米路由器的移动硬盘
  13. 【知识小集】☞Excel之VBA编程语句集300句
  14. python称号_Python成为2018年度编程语言,遥遥领先于其他语言
  15. ESP32在WIN7下USB调试串口驱动安装 解决USB JTAG/serial debug unit (Interface 0)无法安装驱动的问题
  16. windows安装golang多版本管理工具gvm/g
  17. Ansoft Maxwell 永磁体表面磁场和空间磁场仿真
  18. Linux系统云服务器查看/启用网站日志
  19. 第一手知识——切身体验
  20. tomcat11、tomcat10 安装配置(Windows环境)(详细图文)

热门文章

  1. android电视原理图,电视机工作原理
  2. java实现调查问卷_智能办公进行时丨富士施乐邀您参与有奖问卷调查
  3. 伺服驱动器cn1引脚定义_英威腾伺服
  4. 视觉SLAM——英特尔D435i相机内参矩阵标定
  5. takephoto 框架_GitHub - Smecking/TakePhoto: 一款用于在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库...
  6. mysql的service name_安装MYSQL出错:a windows service with the name MYSQL already...service解决...
  7. 小米盒子显示gitv不动_2020电视盒子排行榜,五款“真香”盒子报到
  8. c语言中ai是什么,科普 | 什么是 cDai?
  9. mysql 服务器 utf8_MySQL编码设置方法 MySQL编码为utf8设置方法
  10. 较为综合的c语言题目,c语言考试综合题.doc