优化开机动画时序
authorcaisking <caiyqm@qq.com>
Sat, 25 Apr 2026 10:22:04 +0000 (18:22 +0800)
committercaisking <caiyqm@qq.com>
Sat, 25 Apr 2026 10:22:04 +0000 (18:22 +0800)
code/sdk/application/brandy/brandy_standard/thread_pri_init.c
code/sdk/application/wearable/ohos_startup/ohosfwk_startup.c
code/sdk/middleware/services/gui/uikit/proprietary/src/service/src/graphic_service_wrapper.cpp

index 275be3d..bc234f7 100644 (file)
@@ -543,12 +543,18 @@ static void thread_main(const void *unused)
     //尽早显示启动logo ,需要 lcd 驱动,mount file system , power_display 线程管理 lcd背光\r
     ohos_show_bootup_logo();  \r
     \r
-    button_app_init();\r
-    \r
 #ifdef SUPPORT_AT_VIBRATOR\r
     uapi_vibrator_service_init();\r
 #endif\r
 \r
+#ifdef SUPPORT_OHOSFWK\r
+    // 提前启动开机动画和OHOS框架,避免被后续服务初始化延后\r
+    ohos_startup();\r
+#endif\r
+    \r
+    button_app_init();\r
+    \r
+\r
 #ifdef CONFIG_SYSTEM_VIEW\r
     SEGGER_SYSVIEW_Conf();\r
     // 请在抓取systemview开始的地方调用SEGGER_SYSVIEW_Start接口\r
@@ -626,11 +632,6 @@ static void thread_main(const void *unused)
     // uapi_gnss_http_server_init();\r
 #endif\r
 \r
-#ifdef SUPPORT_OHOSFWK\r
-    //开始播放开机动画,并启动ohos系统\r
-    ohos_startup();\r
-#endif\r
-\r
 #ifdef SUPPORT_PPG_SERVICE\r
     uapi_ppg_service_init();\r
 #endif\r
index 2001387..095dcca 100644 (file)
 #ifdef ENABLE_HP4570\r
 #include "hp4570.h"\r
 #endif\r
+#include "vibrator_service.h"\r
+\r
+#define POWER_ON_VOLTAGE_STABILIZE_MS 1000\r
+#define BOOT_FLOW_PREFIX "[BOOT_FLOW][开机流程] "\r
 \r
 // int32_t user_get_random_bytes(uint32_t size, uint8_t *randnum)\r
 // {\r
@@ -64,7 +68,7 @@ static bool check_power_on_voltage(void)
     {\r
         float batV = 0.0f;\r
         disable_charge();\r
-        uapi_tcxo_delay_ms(1000);\r
+        uapi_tcxo_delay_ms(POWER_ON_VOLTAGE_STABILIZE_MS);\r
         batteryservice_get_voltage_by_channel(&batV,ADC_CHANNEL_BAT_VOLTAGE);\r
         enable_charge();\r
 \r
@@ -220,10 +224,12 @@ void ohos_startup()
     \r
 //#ifdef BOARD_LEINIAO\r
 #ifdef ENABLE_UIKIT\r
+    PRINT(BOOT_FLOW_PREFIX "启动阶段:开机动画初始化开始\n");\r
     boot_animation_init();\r
+    wait_animation_stop();\r
+    PRINT(BOOT_FLOW_PREFIX "启动阶段:开机动画播放结束\n");\r
+    boot_animation_init_deinit();\r
 #endif\r
-wait_animation_stop();\r
-boot_animation_init_deinit();\r
 //#endif\r
 #if defined(CONFIG_OTA_UPDATE_SUPPORT) && defined(ENABLE_UIKIT)\r
     //如果在升级状态,则不进入系统\r
index 742270b..7c49150 100644 (file)
@@ -553,16 +553,24 @@ extern "C"
                 OHOS::RootView::GetInstance()->Add(boot_group);
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, BOOT_FLOW_PREFIX "开机动画任务:开机动画开始播放");
                 ReBootImageAnimatorView->Start();
-            },
-            false);
+            });
     }
 
     void wait_animation_stop(void)
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, BOOT_FLOW_PREFIX "开机动画等待:开始等待动画结束");
+        uint32_t wait_seconds = 0;
+        static constexpr uint32_t BOOT_ANIM_WAIT_TIMEOUT_S = 15;
         while (boot_animation_flag == false)
         {
             LOS_Msleep(1000);
+            wait_seconds++;
+            if (wait_seconds >= BOOT_ANIM_WAIT_TIMEOUT_S) {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                    BOOT_FLOW_PREFIX "开机动画等待:超过%u秒仍未结束,超时继续启动",
+                    BOOT_ANIM_WAIT_TIMEOUT_S);
+                break;
+            }
         }
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, BOOT_FLOW_PREFIX "开机动画等待:动画已结束");
     }