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 a19672fa0924e9fad865356d06b59cbe9fb5ec44..94bbe00648aed3cf53c06656135a29693b26dbd8 100644 --- a/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp +++ b/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp @@ -325,7 +325,11 @@ int UIAbilityLifecycleManager::NotifySCBToStartUIAbility(const AbilityRequest &a auto abilityInfo = abilityRequest.abilityInfo; bool isUIAbility = (abilityInfo.type == AppExecFwk::AbilityType::PAGE && abilityInfo.isStageBasedModel); - if (abilityInfo.isolationProcess && AppUtils::GetInstance().IsStartSpecifiedProcess() && isUIAbility) { + // When 'processMode' is set to new process mode, the priority is higher than 'isolationProcess'. + bool isNewProcessMode = abilityRequest.processOptions && + ProcessOptions::IsNewProcessMode(abilityRequest.processOptions->processMode); + if (!isNewProcessMode && abilityInfo.isolationProcess && AppUtils::GetInstance().IsStartSpecifiedProcess() + && isUIAbility) { TAG_LOGI(AAFwkTag::ABILITYMGR, "StartSpecifiedProcess"); specifiedRequestMap_.emplace(specifiedRequestId_, abilityRequest); DelayedSingleton::GetInstance()->StartSpecifiedProcess(abilityRequest.want, abilityInfo, @@ -346,7 +350,6 @@ int UIAbilityLifecycleManager::NotifySCBToStartUIAbility(const AbilityRequest &a sessionInfo->requestCode = abilityRequest.requestCode; sessionInfo->persistentId = GetPersistentIdByAbilityRequest(abilityRequest, sessionInfo->reuse); sessionInfo->userId = userId_; - sessionInfo->processOptions = abilityRequest.processOptions; sessionInfo->isAtomicService = (abilityInfo.applicationInfo.bundleType == AppExecFwk::BundleType::ATOMIC_SERVICE); TAG_LOGI( AAFwkTag::ABILITYMGR, "Reused sessionId: %{public}d, userId: %{public}d.", sessionInfo->persistentId, userId_); @@ -928,6 +931,7 @@ sptr UIAbilityLifecycleManager::CreateSessionInfo(const AbilityRequ sptr sessionInfo = new SessionInfo(); sessionInfo->callerToken = abilityRequest.callerToken; sessionInfo->want = abilityRequest.want; + sessionInfo->processOptions = abilityRequest.processOptions; if (abilityRequest.startSetting != nullptr) { TAG_LOGD(AAFwkTag::ABILITYMGR, "Assign start setting to session."); sessionInfo->startSetting = abilityRequest.startSetting; @@ -1654,7 +1658,9 @@ int UIAbilityLifecycleManager::MoveAbilityToFront(const AbilityRequest &abilityR return ERR_INVALID_VALUE; } sptr sessionInfo = abilityRecord->GetSessionInfo(); + CHECK_POINTER_AND_RETURN(sessionInfo, ERR_INVALID_VALUE); sessionInfo->want = abilityRequest.want; + sessionInfo->processOptions = nullptr; SendSessionInfoToSCB(callerAbility, sessionInfo); abilityRecord->RemoveWindowMode(); if (startOptions != nullptr) { @@ -2266,6 +2272,7 @@ int UIAbilityLifecycleManager::MoveMissionToFront(int32_t sessionId, std::shared } sptr sessionInfo = abilityRecord->GetSessionInfo(); CHECK_POINTER_AND_RETURN(sessionInfo, ERR_INVALID_VALUE); + sessionInfo->processOptions = nullptr; TAG_LOGI(AAFwkTag::ABILITYMGR, "Call PendingSessionActivation by rootSceneSession." "windowLeft=%{public}d,windowTop=%{public}d," "windowHeight=%{public}d,windowWidth=%{public}d", @@ -2497,7 +2504,6 @@ int UIAbilityLifecycleManager::StartWithPersistentIdByDistributed(const AbilityR sessionInfo->requestCode = abilityRequest.requestCode; sessionInfo->persistentId = persistentId; sessionInfo->userId = userId_; - sessionInfo->processOptions = abilityRequest.processOptions; sessionInfo->isAtomicService = (abilityRequest.abilityInfo.applicationInfo.bundleType == AppExecFwk::BundleType::ATOMIC_SERVICE); return NotifySCBPendingActivation(sessionInfo, abilityRequest);