diff --git a/services/abilitymgr_lite/src/ability_stack_manager.cpp b/services/abilitymgr_lite/src/ability_stack_manager.cpp index 404211ddbe015c327bfe4192239a8e25a5dad225..43190e56d249acbfe8bffd0afbe9ef92c5665e69 100644 --- a/services/abilitymgr_lite/src/ability_stack_manager.cpp +++ b/services/abilitymgr_lite/src/ability_stack_manager.cpp @@ -48,11 +48,18 @@ PageAbilityRecord *AbilityStackManager::GeneratePageAbility(const AbilityInfo &t if (targetMission == nullptr) { targetMission = new AbilityMissionRecord(stack, target.bundleName); stack->PushTopMissionRecord(*targetMission); + targetAbility = new PageAbilityRecord(target, want); + targetMission->PushPageAbility(*targetAbility); } else { + PageAbilityRecord *targetTopAbility = const_cast(targetMission->GetTopPageAbility()); + if (targetTopAbility != nullptr && targetTopAbility->IsSamePageAbility(want)) { + targetAbility = targetTopAbility; + } else { + targetAbility = new PageAbilityRecord(target, want); + targetMission->PushPageAbility(*targetAbility); + } stack->MoveMissionRecordToTop(*targetMission); } - targetAbility = new PageAbilityRecord(target, want); - targetMission->PushPageAbility(*targetAbility); } // default jumps to default, then return to default