From d6cee54a7b7dcb246869f16c8ef746ab9fd942fe Mon Sep 17 00:00:00 2001 From: xue <2144439972@qq.com> Date: Wed, 3 Dec 2025 16:35:43 +0800 Subject: [PATCH] =?utf8?q?=E4=BC=98=E5=8C=96=E8=8E=B7=E5=8F=96=E4=BF=A1?= =?utf8?q?=E5=8F=B7=EF=BC=88=E8=A1=A5=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../thunderbird/include/ThunderBirdModel.h | 1 - .../thunderbird/src/ThunderBirdModel.cpp | 84 ++----------------- 2 files changed, 6 insertions(+), 79 deletions(-) diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/include/ThunderBirdModel.h b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/include/ThunderBirdModel.h index 723353f03..04df4d800 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/include/ThunderBirdModel.h +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/include/ThunderBirdModel.h @@ -32,7 +32,6 @@ 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); diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp index cc751cdb7..b17b31b69 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp @@ -1570,43 +1570,11 @@ extern "C" { m_statusTimer = nullptr; } } - // 网络状态更新后台任务结构体 - struct NetworkStatusUpdateTask { - ThunderBirdModel* model; - }; - // 网络状态更新线程句柄 - static uint32_t g_net_status_update_thread_handle = 0; - - // 网络状态更新后台线程函数 - static void NetworkStatusUpdateThreadFunc(void* arg) - { - NetworkStatusUpdateTask* task = static_cast(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 状态管理回调处理(UI线程部分) + * @brief 状态管理回调处理 */ - void ThunderBirdModel::StatusCallbackUI() + void ThunderBirdModel::StatusCallback() { // if( HasCat1Power() == false) // { @@ -1614,8 +1582,10 @@ extern "C" { // return; // } + // 更新网络状态 + UpdateNetworkStatus(); + // 检查网络状态是否有网 - if(HasNetwork()) { if(get_is_ln_get_device_network_success()) @@ -1811,49 +1781,7 @@ extern "C" { ThunderBirdPresenter::GetInstance()->timer_callback_toui_proc(); } - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "StatusCallbackUI: status=%d", static_cast(m_currentStatus)); - } - - /** - * @brief 状态管理回调处理(启动后台线程更新网络状态) - */ - void ThunderBirdModel::StatusCallback() - { - // ==================== 网络状态处理 ==================== - // 将网络状态更新移到后台线程,避免阻塞UI线程 - NetworkStatusUpdateTask* task = new NetworkStatusUpdateTask(); - task->model = this; - - // 创建后台线程执行网络状态更新 - 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(); - delete task; - } - // 如果线程创建成功,StatusCallbackUI会在后台线程完成后通过PostGraphicEvent调用 + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "StatusCallback: status=%d", static_cast(m_currentStatus)); } -- 2.17.1