From 7a02440ccd47aaae46b9e68eb418e15f33d729fe Mon Sep 17 00:00:00 2001 From: Caisking Date: Tue, 2 Sep 2025 17:21:52 +0800 Subject: [PATCH] =?utf8?q?=E4=BF=AE=E5=A4=8D=E4=B8=BB=E7=95=8C=E9=9D=A2?= =?utf8?q?=E5=8D=A1=E7=89=87=E6=97=A0=E6=B3=95=E5=9B=9E=E5=88=B0=E4=B8=BB?= =?utf8?q?=E7=95=8C=E9=9D=A2=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../fd230/nativeabilityfwk/include/Ability.h | 14 +++++++++- .../fd230/nativeabilityfwk/src/Ability.cpp | 26 ++++++++++++++++--- .../nativeabilityfwk/src/NativeAbility.cpp | 12 ++++++++- 3 files changed, 47 insertions(+), 5 deletions(-) diff --git a/code/sdk/application/wearable/fd230/nativeabilityfwk/include/Ability.h b/code/sdk/application/wearable/fd230/nativeabilityfwk/include/Ability.h index 876c5b0ed..bd82b42a2 100644 --- a/code/sdk/application/wearable/fd230/nativeabilityfwk/include/Ability.h +++ b/code/sdk/application/wearable/fd230/nativeabilityfwk/include/Ability.h @@ -108,9 +108,21 @@ public: uint16_t GetPreSliceId(void) { if (allSlices_.Size() < 2) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] GetPreSliceId - allSlices_ size < 2 (%d), returning invalid", allSlices_.Size()); return gSliceInvalid; } - return static_cast(allSlices_[allSlices_.Size() - 2] & SLICE_MASK); + uint16_t preSliceId = static_cast(allSlices_[allSlices_.Size() - 2] & SLICE_MASK); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] GetPreSliceId - allSlices_ size: %d, preSliceId: %d", allSlices_.Size(), preSliceId); + + // 打印 allSlices_ 的完整内容用于调试 + // printf("[DEBUG] allSlices_ content: ["); + // for (int i = 0; i < allSlices_.Size(); i++) { + // printf("%d", allSlices_[i] & SLICE_MASK); + // if (i < allSlices_.Size() - 1) printf(", "); + // } + // printf("]\n"); + + return preSliceId; } void UpdateCurSlicePageId(uint16_t pageId); diff --git a/code/sdk/application/wearable/fd230/nativeabilityfwk/src/Ability.cpp b/code/sdk/application/wearable/fd230/nativeabilityfwk/src/Ability.cpp index 9c211169f..7286fed81 100644 --- a/code/sdk/application/wearable/fd230/nativeabilityfwk/src/Ability.cpp +++ b/code/sdk/application/wearable/fd230/nativeabilityfwk/src/Ability.cpp @@ -62,12 +62,32 @@ void Ability::StartSlice(uint32_t targetId) } if (sliceId == defaultTargetId_) { - allSlices_.Clear(); // clear slice history when return to main slice - allSlices_.PushBack(defaultTargetId_); + // 只有在 allSlices_ 为空时才清空,否则保持历史记录 + if (allSlices_.IsEmpty()) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] StartSlice - Returning to MAIN slice, allSlices_ is empty, adding main slice"); + allSlices_.PushBack(defaultTargetId_); + } else { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] StartSlice - Returning to MAIN slice, preserving history, size: %d", allSlices_.Size()); + // 如果栈顶不是主界面,则添加主界面 + if ((allSlices_[allSlices_.Size() - 1] & SLICE_MASK) != defaultTargetId_) { + allSlices_.PushBack(defaultTargetId_); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] StartSlice - Added main slice to stack, new size: %d", allSlices_.Size()); + } + } } else if (PageTransitionMgr::GetInstance().IsBackTransitionRunning()) { + WEARABLE_LOGE + (WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] StartSlice - Back transition running, popping from allSlices_, size before: %d", allSlices_.Size()); allSlices_.PopBack(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] StartSlice - allSlices_ size after pop: %d", allSlices_.Size()); } else { - allSlices_.PushBack(targetId); + // 检查是否已经在栈顶,避免重复添加相同的界面 + if (allSlices_.IsEmpty() || (allSlices_[allSlices_.Size() - 1] & SLICE_MASK) != sliceId) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] StartSlice - Adding new slice %d to allSlices_, size before: %d", targetId, allSlices_.Size()); + allSlices_.PushBack(targetId); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] StartSlice - allSlices_ size after push: %d", allSlices_.Size()); + } else { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] StartSlice - Slice %d already on top, not adding again, size: %d", sliceId, allSlices_.Size()); + } } WEARABLE_LOGI(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "Ability StartSlice %d page %d size:%d", sliceId, diff --git a/code/sdk/application/wearable/fd230/nativeabilityfwk/src/NativeAbility.cpp b/code/sdk/application/wearable/fd230/nativeabilityfwk/src/NativeAbility.cpp index b885efe04..0f62c487d 100644 --- a/code/sdk/application/wearable/fd230/nativeabilityfwk/src/NativeAbility.cpp +++ b/code/sdk/application/wearable/fd230/nativeabilityfwk/src/NativeAbility.cpp @@ -91,9 +91,19 @@ void NativeAbility::ResumeAbility(uint32_t targetId) GraphicService::GetInstance()->SetNativeUIRunning(true); NotificationManager::GetInstance()->SetNativeUIRunning(true); if ((targetId & SLICE_MASK) != VIEW_AOD) { - allSlices_.Clear(); // clear slice history when jump from js to native + // 只有在 allSlices_ 为空或者当前目标不是主界面时才清空 + // 这样可以保持界面导航历史的完整性 + if (allSlices_.IsEmpty() || (targetId & SLICE_MASK) != defaultTargetId_) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] ResumeAbility - Jumping from JS to native, clearing allSlices_, size before: %d", allSlices_.Size()); + allSlices_.Clear(); // clear slice history when jump from js to native + WEARABLE_LOGD(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] ResumeAbility - allSlices_ cleared, size after: %d", allSlices_.Size()); + } else { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] ResumeAbility - Preserving allSlices_ history, size: %d", allSlices_.Size()); + } } else { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] ResumeAbility - AOD slice, popping from allSlices_, size before: %d", allSlices_.Size()); allSlices_.PopBack(); // clear invalid slice id + WEARABLE_LOGD(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] ResumeAbility - allSlices_ popped, size after: %d", allSlices_.Size()); } StartSlice(targetId); if (nextSlice_.slice == nullptr) { -- 2.17.1