鸿蒙OS投票机制

news/2024/10/11 17:19:37/

(基于openharmony5.0)

投票机制

param get | grep ohos.boot.time
投票机制参数图
在这里插入图片描述

只有当所有的投票完成,开机动画才会退出,整理需要投票的系统应用(三方应用不参与投票)如下图所示:

在这里插入图片描述

以进程foundation为例:
foundation\systemabilitymgr\safwk\etc\profile\foundation.cfg

"bootevents": ["bootevent.wms.fullscreen.ready","bootevent.appfwk.ready","bootevent.lockscreen.ready","bootevent.wms.ready"
],

可以看到foundation进程有4个投票事件,会在相应的时机,代码中调用SystemWriteParam()方法进行投票。如果有需要投票的地方没有投,会导致开机动画不会退出,开机动画退出会检测bootevent.boot.completed事件。
base\startup\init\services\modules\bootevent\bootevent.c

#define BOOT_EVENT_BOOT_COMPLETED "bootevent.boot.completed"...static int BootEventParaFireByName(const char *paramName)
{BOOT_EVENT_PARAM_ITEM *found = NULL;char *bootEventValue = strrchr(paramName, '.');INIT_CHECK(bootEventValue != NULL, return 0);bootEventValue[0] = '\0';WriteBooteventSysParam(paramName);found = (BOOT_EVENT_PARAM_ITEM *)OH_ListFind(&bootEventList, (void *)paramName, BootEventParaListCompareProc);if (found == NULL) {return 0;}// Already firedif (found->timestamp[BOOTEVENT_READY].tv_sec > 0) {return 0;}INIT_CHECK_RETURN_VALUE(clock_gettime(CLOCK_MONOTONIC,&(found->timestamp[BOOTEVENT_READY])) == 0, 0);g_bootEventNum--;SetServiceBooteventHookMgr(NULL, paramName, 2); // 2: bootevent service has ready// Check if all boot event params are firedif (g_bootEventNum > 0) {return 0;}// All parameters are fired, set boot completed now ...INIT_LOGI("All boot events are fired, boot complete now ...");//所有投票事件都已经完成SystemWriteParam(BOOT_EVENT_BOOT_COMPLETED, "true");SaveServiceBootEvent();// report complete eventReportSysEvent();BootCompleteClearAll();
#ifndef STARTUP_INIT_TESTHookMgrExecute(GetBootStageHookMgr(), INIT_BOOT_COMPLETE, NULL, NULL);
#endifRemoveCmdExecutor("bootevent", -1);return 1;
}

http://www.ppmy.cn/news/1537544.html

相关文章

UE5.3.2查看引擎真正版本

编译好的插件给别人用,发现引擎不一致,而且双方都是5.3.2版本引擎 打开Help->About Unreal Editor可以看到引擎版本 或者直接查看引擎版本文件:XXXXX\Engine\Build\Build.version 里面能看到对应的分支名字

【K8s】专题十四(1):Kubernetes 安全机制之 RBAC

本文内容均来自个人笔记并重新梳理,如有错误欢迎指正! 如果对您有帮助,烦请点赞、关注、转发、订阅专栏! 专栏订阅入口 | 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 | 往期精彩文章 【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决…

15分钟学 Python :编程工具 Idea 和 vscode 中配置 Python ( 补充 )

编程工具配置 Python 在 IDE 和 VSCode 中 在编程学习的过程中,选择合适的开发工具至关重要。本文将详细介绍在两种流行的IDE(IntelliJ IDEA 和 Visual Studio Code)中如何配置Python环境,帮助你更高效地进行Python开发。 一、编…

深入浅出 CSS 定位:全面解析与实战指南

“批判他人总是想的太简单 剖析自己总是想的太困难” 文章目录 目录 前言文章有误敬请斧正 不胜感恩!1. CSS 定位概述2. 定位类型详解2.1 static(默认定位)2.2 relative(相对定位)2.3 absolute(绝对定位&am…

设备树pinctrl子系统

1.pinctrl子系统 大多数 SOC 的 pin 都是支持复用的,比如 IMX6ULL 的 GPIO1_IO03 既可以作为普通的GPIO 使用,也可以作为 I2C1 的 SDA 等等。此外我们还需要配置 pin 的电气特性,比如上/下拉、速度、驱动能力等等。传统的配置 pin 的方式就是…

Javascript Object.assgin()详解以及深浅拷贝

Object.assign() 方法是 JavaScript 中用于将所有可枚举属性的值从一个或多个源对象复制到目标对象的方法。它将返回目标对象。这是一种浅拷贝,也就是说,如果源对象中的属性是一个对象或数组,那么这个属性的引用将被复制,而不是对…

uni-app 实现APP版本更新的深度解析

版本更新是保持应用活力、修复漏洞、增强功能的重要手段。对于使用uni-app框架开发的跨平台应用而言,实现版本更新功能同样重要。本文将详细解析如何在uni-app项目中通过结合uni.request网络请求和plus.runtime API来实现应用的版本更新功能,并重点解析文…

【S32K3 RTD LLD篇5】K344 ADC SW+HW trigger

【S32K3 RTD LLD篇5】K344 ADC SWHW trigger 一,文档简介二,ADC SW HW 触发2.1 软硬件平台2.2 SWADC 软件触发2.3 SWBCTUADC 软件BCTU触发2.4 PITTRIGMUXADC 硬件PIT TRIGUMX触发2.5 EMIOSBCTUHWADC硬件EMIOS BCTU触发2.6 EMIOSBCTUHW LISTADC硬件EMIOS …