news 2026/9/8 1:26:12

Android 8 开机动画简单分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Android 8 开机动画简单分析

1.由于是初步的学习,所以用了一个比较老的安卓8,所以肯定和Android新版本有出入。如果高版本不一样的话,只能说是版本差异了。

2.liunx内核启动的第一个进程就是init进程,是surfaceflinger系统服务的父进程

在编译的时候呢, surfaceflinger的 Android.mk里有这么一行,根据参考得知这个是把surfaceflinger.rc装到init.rc里。LOCAL_INIT_RC。

LOCAL_INIT_RC := surfaceflinger.rc

具体是怎么装的呢?这么装的在这个文件下

build/core/base_rules.mk

说实话很复杂,看不懂,我菜。

ifndef LOCAL_IS_HOST_MODULE # Rule to install the module's companion init.rc. my_init_rc := $(LOCAL_INIT_RC_$(my_32_64_bit_suffix)) $(LOCAL_INIT_RC) ifneq ($(strip $(my_init_rc)),) my_init_rc_pairs := $(foreach rc,$(my_init_rc),$(LOCAL_PATH)/$(rc):$(TARGET_OUT$(partition_tag)_ETC)/init/$(notdir $(rc))) my_init_rc_installed := $(foreach rc,$(my_init_rc_pairs),$(call word-colon,2,$(rc)))

然后在运行的时候就会在这个地方也就是init程序读取surfaceflinger

system\core\init\init.cpp

2.什么时候启动surfaceflinger呢?在下面这个文件里有启动时间 ,参考文章:
init.rc

./system/core/rootdir/init.rc

由于这个surfaceflginger是class core的所以在boot的时候就随着core的启动也启动了。

3.什么时候启动的开机动画呢?

在这个surfaceflinger的init函数里,有这样一个线程:

mStartPropertySetThread

这个线程里有个方法设置了开机动画的属性,使得开机动画启动了。

bool StartPropertySetThread::threadLoop() { // Set property service.sf.present_timestamp, consumer need check its readiness property_set(kTimestampProperty, mTimestampPropertyValue ? "1" : "0"); // Clear BootAnimation exit flag property_set("service.bootanim.exit", "0"); // Start BootAnimation if not started property_set("ctl.start", "bootanim"); // Exit immediately return false; }

4.为什么一设置这个property属性就开机动画了呢?

是因为在init.cpp里的main方法里,开启了一个这个服务。

start_property_service();

这个服务可以读到property_set的发送,(这里有个epoll的知识点,相当于用手机点外卖),然后转到

handle_property_set_fd

这个方法里有一个函数

handle_control_message(name.c_str() + 4, value.c_str());

这个函数呢就是会启动开机动画

void handle_control_message(const std::string& msg, const std::string& name) { Service* svc = ServiceManager::GetInstance().FindServiceByName(name); if (svc == nullptr) { LOG(ERROR) << "no such service '" << name << "'"; return; } if (msg == "start") { svc->Start(); } else if (msg == "stop") { svc->Stop(); } else if (msg == "restart") { svc->Restart(); } else { LOG(ERROR) << "unknown control msg '" << msg << "'"; } }

总结一下:

init启动 ->拉起surfaceflinger -> surfaceflinger执行init方法- >执行startPropertySetThread->设置开机动画属性->开机动画启动。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 21:51:00

大华摄像头网页预览:webplugin.exe插件方案详解与踩坑指南

简介&#xff1a;本资源面向安防系统集成开发者及Web前端工程师&#xff0c;解决大华摄像头缺乏官方Web SDK、难以在网页中实现视频预览与控制的核心痛点。方案基于大华官方Plugin封装的webplugin.exe插件&#xff0c;支持IE11浏览器环境&#xff0c;无需额外开发底层协议&…

作者头像 李华
网站建设 2026/9/5 22:19:52

开源视频智能体部署实战:从环境配置到视频生成全流程解析

2025 年如果要选一个 AI 方向里“看起来最热闹、落地最折腾、围观门槛也最高”的赛道&#xff0c;视频生成一定排得上号。文字模型把内容创作的入口打穿了&#xff0c;图片模型把设计流程重写了一遍&#xff0c;而视频模型则是把“做视频”这个过去需要一整个团队、一台高性能工…

作者头像 李华
网站建设 2026/9/5 12:58:40

WBS实战:从工作分解到里程碑倒排的项目管理指南

很多人以为项目延期是因为成员不努力、需求太多、测试不够&#xff0c;但真正的问题往往在项目刚开始时就埋下了&#xff1a;任务边界没有拆清&#xff0c;依赖关系没有被看见&#xff0c;验收标准写不出来。WBS&#xff08;Work Breakdown Structure&#xff0c;工作分解结构&…

作者头像 李华
网站建设 2026/9/5 12:59:41

HyperMesh 2021基础与模型管理:节点显示、单位设置与网格质量检查

HyperMesh 2021 的培训课&#xff0c;很多机构会把第一节直接放到界面和模型管理上&#xff0c;不是没有道理。基础及模型管理这个主题&#xff0c;看起来不烧脑&#xff0c;实际上决定了你后面画网格、设置材料和检查质量会不会反复返工。尤其是第一次接触 HyperMesh 的人&…

作者头像 李华
网站建设 2026/9/6 8:09:18

搜狐畅游运维开发笔试复盘:从Shell脚本到故障排查与监控设计

1. 2019年这套笔试题的科目构成与难度风向 先交代一下背景。搜狐畅游的校招运维开发工程师岗&#xff0c;笔试并不是只考Linux命令和网络基础&#xff0c;它比传统的"纯运维"卷子多了一个非常明显的信号—— 运维开发的"开发"二字不是白给的 。我那一年拿…

作者头像 李华
网站建设 2026/9/4 14:59:42

跑团Replay制作全流程:从录音整理到成片发布的实用指南

跑团replay是一种把跑团过程中的语音、文字和画面重新整理成视频或长文的二次创作形式。观众没有坐在牌桌边&#xff0c;却要通过成片知道谁在说话、谁在判定、这段剧情发生在哪里。最近要把一档长期团的录音剪成成片&#xff0c;系列名是《莫索里哀的圣职者》&#xff0c;第07…

作者头像 李华