优化表情视频与时间线轻微卡顿的bug
authorxue <2144439972@qq.com>
Mon, 1 Dec 2025 03:50:40 +0000 (11:50 +0800)
committerxue <2144439972@qq.com>
Mon, 1 Dec 2025 03:50:40 +0000 (11:50 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/include/ThunderBirdModel.h
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp

index 0bc416f..f2cf24a 100644 (file)
@@ -31,6 +31,7 @@ namespace OHOS
         void StartStatusTimer(uint32_t interval = 2 * 1000); // 2秒检查一次状态
         void StopStatusTimer(void);
         void StatusCallback();
+        void StatusCallbackUI();  // StatusCallback的UI线程部分
         
         // 业务定时器控制函数(保持原有接口)
         void StartReminderHideTimer(uint32_t intervalMs = 1000);
index e97845f..0f14221 100644 (file)
@@ -49,6 +49,7 @@
 #include "ai_media.h"
 #include "ConfigModelC.h"
 #include "ConfigModel.h"
+#include "cmsis_os2.h"
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -1618,15 +1619,41 @@ extern "C" {
             m_statusTimer = nullptr;
         }
     }
+    // 网络状态更新后台任务结构体
+    struct NetworkStatusUpdateTask {
+        ThunderBirdModel* model;
+    };
+
+    // 网络状态更新后台线程函数
+    static void NetworkStatusUpdateThreadFunc(void* arg)
+    {
+        NetworkStatusUpdateTask* task = static_cast<NetworkStatusUpdateTask*>(arg);
+        if (task == nullptr || task->model == nullptr) {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "NetworkStatusUpdateThreadFunc: Invalid task");
+            if (task) delete task;
+            return;
+        }
+
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NetworkStatusUpdateThreadFunc: Starting background network status update");
+
+        // 在后台线程更新网络状态(耗时操作)
+        task->model->UpdateNetworkStatus();
+
+        // 更新完成后,通过PostGraphicEvent回到UI线程继续处理
+        GraphicService::GetInstance()->PostGraphicEvent([task]() {
+            if (task->model != nullptr) {
+                // 继续执行StatusCallback中需要在UI线程执行的部分
+                task->model->StatusCallbackUI();
+            }
+            delete task;
+        });
+    }
+
     /**
-     * @brief 状态管理回调处理
+     * @brief 状态管理回调处理(UI线程部分)
      */
-    void ThunderBirdModel::StatusCallback()
+    void ThunderBirdModel::StatusCallbackUI()
     {
-        // ==================== 网络状态处理 ====================
-        // 更新网络状态信息(包括SIM卡、信号强度、网络连接等)
-        // 先检查Cat1电源状态
-        UpdateNetworkStatus();
     //    if( HasCat1Power() == false)
     //    {
     //         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Cat1电源状态异常,跳过网络检查");
@@ -1830,7 +1857,34 @@ extern "C" {
             ThunderBirdPresenter::GetInstance()->timer_callback_toui_proc();
         }
         
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "StatusCallback: status=%d", static_cast<int>(m_currentStatus));
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "StatusCallbackUI: status=%d", static_cast<int>(m_currentStatus));
+    }
+
+    /**
+     * @brief 状态管理回调处理(启动后台线程更新网络状态)
+     */
+    void ThunderBirdModel::StatusCallback()
+    {
+        // ==================== 网络状态处理 ====================
+        // 将网络状态更新移到后台线程,避免阻塞UI线程
+        NetworkStatusUpdateTask* task = new NetworkStatusUpdateTask();
+        task->model = this;
+
+        // 创建后台线程执行网络状态更新
+        osThreadAttr_t attr = {};
+        attr.name = "NetStatusUpdate";
+        attr.stack_size = 0x2000; // 8KB栈
+        attr.priority = osPriorityNormal;
+        
+        osThreadId_t threadId = osThreadNew((osThreadFunc_t)NetworkStatusUpdateThreadFunc, task, &attr);
+        if (threadId == nullptr) {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::StatusCallback: Failed to create background thread, falling back to sync");
+            // 如果线程创建失败,回退到同步方式(不推荐,但至少能工作)
+            UpdateNetworkStatus();
+            StatusCallbackUI();
+            delete task;
+        }
+        // 如果线程创建成功,StatusCallbackUI会在后台线程完成后通过PostGraphicEvent调用
     }