Android开机动画的结束过程BootAnimation(基于Android10.0.0-r41)

文章目录

  • Android 开机动画的结束过程BootAnimation(基于Android10.0.0-r41)

Android 开机动画的结束过程BootAnimation(基于Android10.0.0-r41)

路径frameworks/base/cmds/bootanimation/bootanimation_main.cpp

init进程把我们的BootAnimation的二进制文件拉起来了,

从进程的main方法入手

在这里插入图片描述

bootAnimationDisabled判断开机动画有没有被禁止。

bootAnimationDisabled为false就是能看到开机动画。进入if条件,

ProcessState::self()->startThreadPool();启动一个线程池,用来初始化一些binder跨进程通信的一些属性,绘制图形都需要依赖waitForSurfaceFlinger();,要等SurfaceFlinger进程启动了开机动画才有用,

看下构造方法做了什么

在这里插入图片描述

mSession = new SurfaceComposerClient();binder调用的一个代理对象,主要是跨进程通信和 SurfaceFinger,

判断开关机的一个属性

std::string powerCtl = android::base::GetProperty("sys.powerctl", "");if (powerCtl.empty()) {mShuttingDown = false;} else {mShuttingDown = true;}

sp是一个智能指针,如果有sp这个东西就会有对应的下面的这个类,,就会执行这个类。

void BootAnimation::onFirstRef() {status_t err = mSession->linkToComposerDeath(this);SLOGE_IF(err, "linkToComposerDeath failed (%s) ", strerror(-err));if (err == NO_ERROR) {// Load the animation content -- this can be slow (eg 200ms)// called before waitForSurfaceFlinger() in main() to avoid waitALOGD("%sAnimationPreloadTiming start time: %" PRId64 "ms",mShuttingDown ? "Shutdown" : "Boot", elapsedRealtime());preloadAnimation();ALOGD("%sAnimationPreloadStopTiming start time: %" PRId64 "ms",mShuttingDown ? "Shutdown" : "Boot", elapsedRealtime());}
}

Bootanimation继承自Thread类

在这里插入图片描述

先会执行readyToRun,然后执行threadLoop

在这里插入图片描述

在这里插入图片描述

mDisplayToken = SurfaceComposerClient::getInternalDisplayToken();if (mDisplayToken == nullptr)return -1;DisplayInfo dinfo;status_t status = SurfaceComposerClient::getDisplayInfo(mDisplayToken, &dinfo);if (status)return -1;

获取屏幕信息之后,直接跟SufaceFinger通信的一个control

// create the native surfacesp<SurfaceControl> control = session()->createSurface(String8("BootAnimation"),dinfo.w, dinfo.h, PIXEL_FORMAT_RGB_565);

control构建一个画布。主要是和SufaceFinger通信。

初始化opengl

在这里插入图片描述

开机动画路径

在这里插入图片描述

在这里插入图片描述

static const char OEM_BOOTANIMATION_FILE[] = "/oem/media/bootanimation.zip";
static const char PRODUCT_BOOTANIMATION_DARK_FILE[] = "/product/media/bootanimation-dark.zip";

我们的开机动画主要走这个方法

在这里插入图片描述

检查退出

在这里插入图片描述

设置一个开机动画退出的属性,值为1就是退出。

在这里插入图片描述

用命令可以搜索一下它这个属性在什么地方会被设置为1

在这里插入图片描述

在WMS中

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/846119.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS开发中的sceneDidEnterBackground和applicationDidEnterBackground

在 iOS 应用开发中&#xff0c;sceneDidEnterBackground 和 applicationDidEnterBackground 是两个不同的生命周期方法&#xff0c;它们分别属于 UISceneDelegate 和 UIApplicationDelegate&#xff0c;用于处理应用程序或场景进入后台时的逻辑。以下是它们的区别和用法&#x…

字符串和字节串

字符串和字节串 在 Python 中,字符串(String)和字节串(Byte String)是两种不同的数据类型。 字符串(String) 字符串是一种文本数据类型,它可以包含 Unicode 字符。Python 的字符串是使用 Unicode 编码的,可以包含任何语言的字符。 例如: s = "hello" …

YOLOv5改进 | 添加注意力篇 | 利用YOLOv10提出的PSA注意力机制助力YOLOv5有效涨点(附代码 + 详细修改教程)

一、本文介绍 本文给大家带来的改进机制是YOLOv10提出的PSA注意力机制&#xff0c;自注意力在各种视觉任务中得到了广泛应用&#xff0c;因为它具有显著的全局建模能力。然而&#xff0c;自注意力机制表现出较高的计算复杂度和内存占用。为了解决这个问题&#xff0c;鉴于注意…

一个可以自动生成随机区组试验的excel VBA小程序

在作物品种区域试验时&#xff0c;通常会采用随机区组试验设计&#xff0c;特制作了一个可以自动生成随机区组试验的小程序。excel参数界面如下&#xff1a; 参数含义如下&#xff1a; 1、生成新表的名称&#xff1a;程序将新建表格&#xff0c;用于生成随机区组试验。若此处为…

2024年3月电子学会Python编程等级考试(四级)真题题库

2024年3月青少年软件编程Python等级考试&#xff08;四级&#xff09;真题试卷 题目总数&#xff1a;38 总分数&#xff1a;100 选择题 第 1 题 单选题 运行如下Python代码&#xff0c;若输入整数3&#xff0c;则最终输出的结果为&#xff1f;&#xff08; &#xff…

java动态获取实体类字段的方法

1.使用反射&#xff08;Reflection&#xff09;API来动态地获取实体类的字段 在Java中&#xff0c;我们可以使用反射&#xff08;Reflection&#xff09;API来动态地获取实体类的字段。以下是一个详细的代码示例&#xff0c;演示了如何获取一个实体类的所有字段&#xff1a; …

arm cortex-m架构 SVC指令详解以及其在freertos的应用

1. 前置知识 本文基于arm cortex-m架构描述&#xff0c; 关于arm cortex-m的一些基础知识可以参考我另外几篇文章&#xff1a; arm cortex-m 架构简述arm异常处理分析c语言函数调用规范-基于arm 分析 2 SVC指令 2.1 SVC指令位域表示 bit15 - bit12&#xff1a;条件码&#…

SOFA-RPC学习记录

文章目录 需求分析模块划分微服务模块交互模块 可拓展架构插件机制 功能分析交互模块 学习微服务模块交互模块 dubbo与nacos集成学习Nacos配置中心实战 dubbo与apollo集成学习配置中心组件与k8s的抉择参考资料 结论 本报告旨在深入学习SOFA-RPC框架&#xff0c;特别是其动态配置…

LeetCode 每日一题 2024/5/27-2024/6/2

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 5/27 2028. 找出缺失的观测数据5/28 2951. 找出峰值5/29 2981. 找出出现至少三次的最长特殊子字符串 I5/30 2982. 找出出现至少三次的最长特殊子字符串 II5/31 2965. 找出缺…

Linux综合实践(Ubuntu)

目录 一、配置任务 1.1 配置该服务器的软件源为中科大软件源 1.2 安装相关软件openssh-server和vim 1.3 设置双网卡&#xff0c;网卡1为NAT模式&#xff0c;网卡2为桥接模式(桥接模式下&#xff0c;使用静态ip&#xff0c;该网卡数据跟实验室主机网络设置相似&#xff0c;除…

如何搜索[仅有1个文件]或[指定个数范围、名称、类型文件等复杂情况]的文件夹

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 打开工具&#xff0c;切换到批量复制板块&#xff0c;用Ctrl5可以快速切换 然后鼠标移动到工具的贴边的右侧&#xff0c;不是移出工具外面&#xff0c;还在…

【赠书第22期】AI绘画全面精通

文章目录 前言 1 AI绘画基础知识 2 AI绘画技术应用 2.1 风格迁移 2.2 自动绘画 2.3 辅助绘画 3 AI绘画发展前景 3.1 艺术创作领域的变革 3.2 跨领域融合与创新 3.3 个性化艺术创作的普及 4 结语 5 推荐图书 6 粉丝福利 前言 随着科技的飞速发展&#xff0c;人工智…

自学 Java 怎么入门?

关于自学 Java 如何入门这一重要课题&#xff0c;在此为大家进行详细阐述。 在此之前&#xff0c;如果大家有兴趣的话&#xff0c;可以看看我自己精心整理的嵌入式入门资料&#xff0c;这些资料将全部免费送给大家。其中包含了编程教学内容、详细的视频讲解、实用的数据库资料…

锅炉智能制造工厂工业物联数字孪生平台,推进制造业数字化转型

在制造业快速发展的今天&#xff0c;数字化转型已经成为企业提升竞争力的关键途径。锅炉智能制造工厂工业物联数字孪生平台&#xff0c;作为一种创新的技术解决方案&#xff0c;正以其独特的优势&#xff0c;为制造业的数字化转型提供强大动力。锅炉智能制造工厂工业物联数字孪…

libevent源码跨平台编译(windows/macos/linux)

1.windows编译: 克隆: git clone https://github.com/libevent/libevent.git 克隆成功 生成makefile 生成成功 默认不支持OpenSSL,MbedTLS,ZLIB这三个库 编译: cmake --build . --config release

设计模式(一)单例模式

文章目录 单例模式简介单例模式实现饿汉式-静态常量饿汉式-静态代码块懒汉式-线程不安全线程安全-同步方法懒汉式-线程不安全-单一判断懒汉式-线程安全-双重判断&#xff08;推荐使用&#xff09;懒汉式-线程安全-静态内部类枚举类 单例模式简介 单例模式属于创建型设计模式&a…

深入分析 Android Service (完)

文章目录 深入分析 Android Service (完)1. Service 的生命周期管理2. Service 的生命周期方法2.1 onCreate()2.2 onStartCommand(Intent intent, int flags, int startId)2.3 onBind(Intent intent)2.4 onUnbind(Intent intent)2.5 onRebind(Intent intent)2.6 onDestroy() 3.…

centos系统上新建用户

目录 新建用户 设置密码 给予sudo权限 切换到新用户 新建用户 adduser 用户名 设置密码 passwd 用户名 给予sudo权限 usermod -aG wheel 用户名 切换到新用户 su 用户名

子集树与排列树的构造

排列树的构造&#xff1a; 无重复画法&#xff1a;一条线前面出现的不再出现。 有重复画法&#xff1a;一条线前面出现的不再出现&#xff0c;如果仅仅只是相似可以出现&#xff1b;兄弟不能相似。 目标函数是&#xff1a;cnt 总元素个数分支策略是全遍历&#xff0c;不过存…