优化网络获取线程
authorxue <2144439972@qq.com>
Tue, 2 Dec 2025 11:42:05 +0000 (19:42 +0800)
committerxue <2144439972@qq.com>
Tue, 2 Dec 2025 11:42:05 +0000 (19:42 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/ota/src/OtaModel.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp

index 9ccc15e..42e5ecb 100644 (file)
@@ -274,6 +274,12 @@ namespace OHOS
     } else if(status == 4) {
         OtaModel::GetInstance()->ClearNightUpdateStatus();//重置夜间升级
         OtaView::GetInstance()->ChangeView(OtaView::OTA_VIEW_UPDATING, OtaView::OTA_VIEW_UPDATE_SUCCESS);
+        
+        // OTA升级成功,确保触发重启
+        // 注意:uaip_cmd_update_request() 已经在 ln_api_ota.c 中调用,
+        // 但为了确保重启能够执行,这里也触发一次重启流程
+        // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OtaModel::CheckOtaResult: OTA升级成功,触发重启流程");
+        // shutdown_reboot_prejobs(UPDATE_TYPE);
     }
   }
   void OtaModel::UpdateOtaProgress(int progress)
index 86af911..9b225d2 100644 (file)
@@ -1627,6 +1627,9 @@ extern "C" {
     struct NetworkStatusUpdateTask {
         ThunderBirdModel* model;
     };
+    
+    // 网络状态更新线程句柄
+    static uint32_t g_net_status_update_thread_handle = 0;
 
     // 网络状态更新后台线程函数
     static void NetworkStatusUpdateThreadFunc(void* arg)
@@ -1875,14 +1878,29 @@ extern "C" {
         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");
+        app_task_definition_ext_t task_cfg;
+        memset(&task_cfg, 0, sizeof(task_cfg));
+        
+        task_cfg.attr.name = "NetStatusUpdate";
+        task_cfg.attr.priority = osPriorityNormal;
+        task_cfg.attr.stack_size = 0x1000; // 4KB栈(UpdateNetworkStatus需要调用底层API,需要足够栈空间)
+        task_cfg.func = (osThreadFunc_t)NetworkStatusUpdateThreadFunc;
+        task_cfg.task_handle = &g_net_status_update_thread_handle;
+        task_cfg.create_queue_handle = NULL;
+        task_cfg.use_mem = USE_EXTEND_MEM; /* 将线程栈放到扩展内存,降低TCB/heap压力 */
+        task_cfg.inst_args = task; /* 传递任务参数 */
+        
+        errcode_t tret = uapi_create_osThread_custom_with_args(&task_cfg);
+        // 注意:uapi_create_osThread_custom_with_args 会将 osThreadId_t (void*) 直接赋值给 task_handle 指针
+        // 需要手动转换并设置到我们的句柄变量中
+        if (tret == ERRCODE_SUCC && task_cfg.task_handle != NULL) {
+            // 将线程ID转换为uint32_t并设置到句柄变量
+            // task_handle 字段存储的是 osThreadId_t (void*) 值,需要转换为 uint32_t
+            void* threadId = (void*)task_cfg.task_handle;
+            g_net_status_update_thread_handle = (uint32_t)(unsigned long)threadId;
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::StatusCallback: thread created successfully, handle=0x%x", g_net_status_update_thread_handle);
+        } else {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::StatusCallback: thread create failed: 0x%x", tret);
             // 如果线程创建失败,回退到同步方式(不推荐,但至少能工作)
             UpdateNetworkStatus();
             StatusCallbackUI();