一丶环境

源码版本:OpenHarmony 4.1 Release

板子型号:RK3568(dayu200)

二丶开机动画启动流程

在了解开机动画流程,我们先熟悉一下OpenHarmony的启动流程,简单的定义一下,分为四个阶段,如下图所示:

img

Stage-Bootloader:这个阶段是从上电后,Uboot的启动阶段,主要是上电检查硬件。

Stage-Kernel:Uboot引导内核启动。

Stage-init:init进程加载

Stage-Service:Sa服务并行启动

三丶投票机制

了解了OH的启动流程后,我们就需要了解这个投票机制,当设备正常启动后,通过hdc shell进入终端,然后通过shell命令,来查看。

param get | grep ohos.boot.time (4.1版本,4.0版本使用 param get | grep bootevent)

ohos.boot.time.kernel = 5683405 
ohos.boot.time.init = 11079717 
ohos.boot.time.wms.fullscreen.ready = 15822951 
ohos.boot.time.samgr.ready = 11129567 
ohos.boot.time.boot.completed = 20220300 
ohos.boot.time.param_watcher.started = 11130059 
ohos.boot.time.appspawn.started = 11822187 
ohos.boot.time.useriam.fwkready = 12424358 
ohos.boot.time.appfwk.ready = 13828547 
ohos.boot.time.account.ready = 14262574 
ohos.boot.time.lockscreen.ready = 15952929 
ohos.boot.time.bootanimation.ready = 12713553 
ohos.boot.time.bootanimation.started = 15002046 
ohos.boot.time.bootanimation.finished = 20220219

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

img

那么如何参与投票呢,首先在sa的cfg文件中,需要申明,然后在调用SetParameter接口进行投票。

以foundation.cfg为例子,可以看到有三个投票事件:

            "bootevents": [

                "bootevent.wms.fullscreen.ready",

                "bootevent.appfwk.ready",

                "bootevent.lockscreen.ready"

            ],

以bootevent.wms.fullscreen.ready这个事件来举例:

在对应foundation的源码路径为foundation/window/window_manager/wmserver/src/window_controller.cpp:

system::SetParameter("bootevent.wms.fullscreen.ready", "true");

这样就完成了投票,其他的投票事件都可以搜索关键字,查看对应投票的时机,如果需要的投票没有投,会导致开机动画不会退出。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐