android开机动画多长时间_Android开机动画原理分析
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开机动画原理分析相关推荐
- android开机动画多长时间_Android系统开机动画的一生
前言 在上篇文章[Android从上电到加载launcher,都发生了啥]中,简单介绍了Android系统从上电到加载launcher的流程,但比较粗略,特别是init之后,开机动画如何启动,又如何结 ...
- android开机动画多长时间_android开关机动画和铃声配置
12. 分区修改 A 修改分区文件mediatek\build\tools\ptgen\partition_table.xls B 修改分区头文件mediatek\custom\project\com ...
- 游戏服务器维护启动需要多久,游戏服务器开机需要多长时间
游戏服务器开机需要多长时间 内容精选 换一换 垃圾回收器是内存回收的具体实现,JDK自带的垃圾回收器已经完成集成垃圾回收和清理算法,业务程序可以通过设置参数选择垃圾回收器,虚拟机用到的7种经典的垃圾回 ...
- 笔记本换固态后开机慢(长时间卡在黑屏)
关于笔记本换固态后开机慢(长时间卡在黑屏) 机型联想z485 因为机械速度慢,所以想把电脑升下级,装好了固态,加个内存条,
- 出现开机慢、开机黑屏长时间的进(转至卡饭论坛,帖子最早出现在爱毒霸社区论坛)之二
本帖最后由 772844863 于 2012-3-25 12:38 编辑 事件: 近期接到不少用户向我们反馈出现开机慢.开机黑屏长时间 的问题,并且是毫无征兆的出现了 出现的问题现象包含有: 1.以前 ...
- Win系统 - 如何查看电脑开机了多长时间?
方法一 在开始菜单中输入'cmd'搜索,在出现的结果中"cmd.exe"中右击,然后选择"以管理员身份运行"或者直接点击它. 也可以直接按下键盘的组合键&quo ...
- Android跳转动画时长,Android_Activit跳转动画之界面上某个位置并裂开上下拉伸动画跳转,需求:Activity(fragment)跳转的时候 - phpStudy...
Activit跳转动画之界面上某个位置并裂开上下拉伸动画跳转 需求:Activity(fragment)跳转的时候当前界面裂开,上下各自拉出手机屏幕,之后跳转到相对应的Activity.整体效果图如下 ...
- 计算机长期不用无法开机,电脑长时间不用开机进不了系统怎么办
1.可能是电脑受潮了,把电脑在强光下曝晒10小时,或者将主板上的电池扣下来 擦拭干净,然后按上去 这时开机启动即可. 2.打开机箱,观察显卡,CPU电源的风扇是否都正常转动,散热片上是否灰尘较多,机箱 ...
- Android JNI调用OpenCV,长时间运行内存异常,导致闪退的log分析和解决---(ReferenceTable overflow (max=1024)造成的)
首先交代下问题背景,前些日子自己在android上搞了个入侵检测玩.就是camera当作监控设备,每隔一定时间检测是否有东西入侵,如果入侵率到一定程度就报警的东西.最近发现,每次运行超过20分钟,ap ...
最新文章
- 只用一次+ 求三个整数之和
- BZOJ 2742: [HEOI2012]Akai的数学作业
- Metal之Shading Language Specification(着色语言规范)
- Linux Shell常用技巧(二)
- ubuntu配置vnc访问
- Linux下编写UDP/TCP版本的服务器和客户端的流程
- 上帝就在机器里:复杂算法背后隐藏的可怕现实
- 如何在虚拟机上安装wsus服务器,如何在Hyper-V虚拟机上安装WSUS服务器技巧_Hyper-V...
- Linux下的iftop命令介绍
- python 对象转json
- usb万能驱动win7_我!Win7!还能接着续!Z490 B460 H410 Win7 保姆教程
- Windows电脑如何访问小米路由器的移动硬盘
- 【知识小集】☞Excel之VBA编程语句集300句
- python称号_Python成为2018年度编程语言,遥遥领先于其他语言
- ESP32在WIN7下USB调试串口驱动安装 解决USB JTAG/serial debug unit (Interface 0)无法安装驱动的问题
- windows安装golang多版本管理工具gvm/g
- Ansoft Maxwell 永磁体表面磁场和空间磁场仿真
- Linux系统云服务器查看/启用网站日志
- 第一手知识——切身体验
- tomcat11、tomcat10 安装配置(Windows环境)(详细图文)
热门文章
- android电视原理图,电视机工作原理
- java实现调查问卷_智能办公进行时丨富士施乐邀您参与有奖问卷调查
- 伺服驱动器cn1引脚定义_英威腾伺服
- 视觉SLAM——英特尔D435i相机内参矩阵标定
- takephoto 框架_GitHub - Smecking/TakePhoto: 一款用于在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库...
- mysql的service name_安装MYSQL出错:a windows service with the name MYSQL already...service解决...
- 小米盒子显示gitv不动_2020电视盒子排行榜,五款“真香”盒子报到
- c语言中ai是什么,科普 | 什么是 cDai?
- mysql 服务器 utf8_MySQL编码设置方法 MySQL编码为utf8设置方法
- 较为综合的c语言题目,c语言考试综合题.doc