diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 05ff19770f..d702ab7732 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -2433,7 +2433,8 @@ int AbilityManagerService::StartAbilityForOptionInner(const Want &want, const St !startOptions.processOptions->isRestartKeepAlive && !ProcessOptions::IsAttachToStatusBarItemMode(startOptions.processOptions->processMode) && currentProcessName != START_SELF_UI_ABILITY_IN_CHILD_PROCESS_FLAG && - !startOptions.processOptions->isStartFromNDK) { + !startOptions.processOptions->isStartFromNDK && + startOptions.processOptions->selfPid == -1) { TAG_LOGE(AAFwkTag::ABILITYMGR, "processMode is not attach to status bar item."); AbilityEventUtil::SendStartAbilityErrorEvent(eventInfo, ERR_ABILITY_ALREADY_RUNNING, "processMode is not attach to status bar item"); diff --git a/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp b/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp index dadf233bdf..23485a8b25 100644 --- a/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp +++ b/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp @@ -4846,6 +4846,9 @@ ErrCode UIAbilityLifecycleManager::IsUIAbilityAlreadyExist(const Want &want, const std::string &specifiedFlag, int32_t appIndex, const std::string &instanceKey, AppExecFwk::LaunchMode launchMode) { + if (launchMode == AppExecFwk::LaunchMode::STANDARD) { + return ERR_OK; + } std::unordered_map tempSessionAbilityMap; { std::lock_guard guard(sessionLock_); diff --git a/test/unittest/ui_ability_lifecycle_manager_test/ui_ability_lifecycle_manager_test.cpp b/test/unittest/ui_ability_lifecycle_manager_test/ui_ability_lifecycle_manager_test.cpp index a3079a7f96..e901b28fb9 100644 --- a/test/unittest/ui_ability_lifecycle_manager_test/ui_ability_lifecycle_manager_test.cpp +++ b/test/unittest/ui_ability_lifecycle_manager_test/ui_ability_lifecycle_manager_test.cpp @@ -7391,7 +7391,7 @@ HWTEST_F(UIAbilityLifecycleManagerTest, EnableListForSCBRecovery_001, TestSize.L /** * @tc.name: IsUIAbilityAlreadyExist_0001 - * @tc.desc: In STANDARD launch mode if a record with same ability exists return ERROR_UIABILITY_IS_ALREADY_EXIST + * @tc.desc: In SINGLETON launch mode if a record with same ability exists return ERROR_UIABILITY_IS_ALREADY_EXIST * @tc.type: FUNC */ HWTEST_F(UIAbilityLifecycleManagerTest, IsUIAbilityAlreadyExist_0001, TestSize.Level1) @@ -7408,7 +7408,7 @@ HWTEST_F(UIAbilityLifecycleManagerTest, IsUIAbilityAlreadyExist_0001, TestSize.L abilityRequest.abilityInfo.name = abilityName; abilityRequest.abilityInfo.bundleName = bundleName; abilityRequest.abilityInfo.moduleName = moduleName; - abilityRequest.abilityInfo.launchMode = AppExecFwk::LaunchMode::STANDARD; + abilityRequest.abilityInfo.launchMode = AppExecFwk::LaunchMode::SINGLETON; abilityRequest.sessionInfo = new SessionInfo(); abilityRequest.sessionInfo->instanceKey = instanceKey; auto record = UIAbilityRecord::CreateAbilityRecord(abilityRequest); @@ -7418,7 +7418,7 @@ HWTEST_F(UIAbilityLifecycleManagerTest, IsUIAbilityAlreadyExist_0001, TestSize.L Want want; want.SetElementName("device", bundleName, abilityName, moduleName); - auto ret = mgr->IsUIAbilityAlreadyExist(want, "", appIndex, instanceKey, AppExecFwk::LaunchMode::STANDARD); + auto ret = mgr->IsUIAbilityAlreadyExist(want, "", appIndex, instanceKey, AppExecFwk::LaunchMode::SINGLETON); EXPECT_EQ(ret, ERROR_UIABILITY_IS_ALREADY_EXIST); } @@ -7481,7 +7481,7 @@ HWTEST_F(UIAbilityLifecycleManagerTest, IsUIAbilityAlreadyExist_0003, TestSize.L record->SetAppIndex(0); record->SetInstanceKey("key"); mgr->sessionAbilityMap_[5] = record; - ret = mgr->IsUIAbilityAlreadyExist(want, "flag", 0, "key", AppExecFwk::LaunchMode::STANDARD); + ret = mgr->IsUIAbilityAlreadyExist(want, "flag", 0, "key", AppExecFwk::LaunchMode::SINGLETON); EXPECT_EQ(ret, ERR_OK); }