From af3e76e64167fdf4375d5cd2a6e2e16efd496489 Mon Sep 17 00:00:00 2001 From: xue <2144439972@qq.com> Date: Sun, 2 Nov 2025 17:14:39 +0800 Subject: [PATCH] =?utf8?q?=E4=BF=AE=E5=A4=8D=E4=B8=8B=E8=BD=BD=E6=97=B6?= =?utf8?q?=E8=A7=A3=E7=BB=91=E4=BC=9A=E6=AD=BB=E6=9C=BA=E7=9A=84Bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../nativeui/uiservice/src/ui_service.cpp | 40 ++++++++++++++++++- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/uiservice/src/ui_service.cpp b/code/sdk/application/wearable/ln/nativeapp/nativeui/uiservice/src/ui_service.cpp index 5c1a04bde..79dcafe7c 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/uiservice/src/ui_service.cpp +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/uiservice/src/ui_service.cpp @@ -569,8 +569,44 @@ void HandBindAndUnbindNotify(Request *request) WEARABLE_LOGE(WEARABLE_LOG_MODULE_UI_SERVICE, "HandBindAndUnbindNotify msg_id = %d", request->msgId); int is_bind = *(int *)request->data; WEARABLE_LOGE(WEARABLE_LOG_MODULE_UI_SERVICE, "HandBindAndUnbindNotify is_bind = %d", is_bind); - GraphicService::GetInstance()->PostGraphicEvent( - std::bind(&OHOS::ThunderBirdModel::HandleBindAndUnbind,OHOS::ThunderBirdModel::GetInstance(), is_bind)); + + // 检查当前是否在 OTA slice + uint16_t currentSliceId = OHOS::NativeAbility::GetInstance().GetCurSliceId(); + if (currentSliceId == VIEW_OTA) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_UI_SERVICE, "HandBindAndUnbindNotify: 当前在 OTA slice,退出下载并切换回 ThunderBird"); + + // 停止 OTA 倒计时定时器(如果正在倒计时) + OHOS::OtaModel::GetInstance()->StopCountdownTimer(); + + // 重置 OTA 状态 + OHOS::ThunderBirdModel::GetInstance()->ResetOtaStatus(); + + // 清空下载文件类型,防止切换到 ThunderBird 后自动恢复下载 + OHOS::ThunderBirdModel::GetInstance()->ClearDownloadFile(); + + // 切换回 ThunderBird slice + OHOS::NativeAbility::GetInstance().SwitchSlice(VIEW_THUNDER_BIRD); + + // 等待 slice 切换完成后再执行解绑逻辑 + // 使用 PostGraphicEvent 确保在下一个图形事件循环中执行解绑 + GraphicService::GetInstance()->PostGraphicEvent([is_bind]() { + // 再次检查是否已经切换回 ThunderBird slice + uint16_t sliceId = OHOS::NativeAbility::GetInstance().GetCurSliceId(); + if (sliceId == VIEW_THUNDER_BIRD) { + // 执行解绑逻辑 + OHOS::ThunderBirdModel::GetInstance()->HandleBindAndUnbind(is_bind); + } else { + // 如果还没切换完成,延迟一下再执行 + GraphicService::GetInstance()->PostGraphicEvent([is_bind]() { + OHOS::ThunderBirdModel::GetInstance()->HandleBindAndUnbind(is_bind); + }); + } + }); + } else { + // 不在 OTA slice,正常执行解绑逻辑 + GraphicService::GetInstance()->PostGraphicEvent( + std::bind(&OHOS::ThunderBirdModel::HandleBindAndUnbind,OHOS::ThunderBirdModel::GetInstance(), is_bind)); + } } // 更新文本内容通知 -- 2.17.1