diff --git a/services/appmgr/src/app_mgr_service_inner.cpp b/services/appmgr/src/app_mgr_service_inner.cpp index 91b0a989cf..98c5d0c4f6 100644 --- a/services/appmgr/src/app_mgr_service_inner.cpp +++ b/services/appmgr/src/app_mgr_service_inner.cpp @@ -1459,6 +1459,12 @@ int32_t AppMgrServiceInner::TryToUseImageInfo(std::shared_ptr abili NotifyStartProcessFailed(token); return ret; } + bool appExistFlag = appRunningManager_->IsAppExist(appInfo->accessTokenId); + bool appMultiUserExistFlag = appRunningManager_->CheckAppRunningRecordIsExistByUid(appInfo->uid); + if (!appMultiUserExistFlag) { + NotifyAppRunningStatusEvent( + appInfo->bundleName, appInfo->uid, AbilityRuntime::RunningStatus::APP_RUNNING_START); + } appRecord = CreateAppRunningRecordFromImageInfo(imageInfo); if (appRecord == nullptr) { SnapshotErrorReport(appInfo->uid, appInfo->bundleName, -1, "appRecord not exist"); @@ -1496,7 +1502,6 @@ int32_t AppMgrServiceInner::TryToUseImageInfo(std::shared_ptr abili KillingProcessManager::GetInstance().RemoveKillingCallerKey(key); OnAppStateChanged(appRecord, ApplicationState::APP_STATE_CREATE, false, false, false); DelayedSingleton::GetInstance()->OnProcessCreated(appRecord, false); - bool appExistFlag = appRunningManager_->IsAppExist(appInfo->accessTokenId); if (!appExistFlag) { OnAppStarted(appRecord); } diff --git a/test/unittest/app_mgr_service_inner_eighth_test/app_mgr_service_inner_eighth_test.cpp b/test/unittest/app_mgr_service_inner_eighth_test/app_mgr_service_inner_eighth_test.cpp index 0437827ac0..7c1b9b7a86 100644 --- a/test/unittest/app_mgr_service_inner_eighth_test/app_mgr_service_inner_eighth_test.cpp +++ b/test/unittest/app_mgr_service_inner_eighth_test/app_mgr_service_inner_eighth_test.cpp @@ -3984,5 +3984,51 @@ HWTEST_F(AppMgrServiceInnerEighthTest, ReportAbilityStartInfoForSpecified_006, T appMgrServiceInner->ReportAbilityStartInfoForSpecified(appRecord, abilityInfo); TAG_LOGI(AAFwkTag::TEST, "ReportAbilityStartInfoForSpecified_006 end"); } + +/** + * @tc.name: TryToUseImageInfo_NotifyAppRunningStatusEvent_001 + * @tc.desc: Test TryToUseImageInfo when appMultiUserExistFlag is false, should call NotifyAppRunningStatusEvent + * @tc.type: FUNC + */ +HWTEST_F(AppMgrServiceInnerEighthTest, TryToUseImageInfo_NotifyAppRunningStatusEvent_001, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::TEST, "TryToUseImageInfo_NotifyAppRunningStatusEvent_001 start"); + auto appMgrServiceInner = std::make_shared(); + auto appRunningManager = std::make_shared(); + appMgrServiceInner->appRunningManager_ = appRunningManager; + + auto abilityInfo = std::make_shared(); + abilityInfo->name = "testAbility"; + abilityInfo->bundleName = "testBundle"; + + auto appInfo = std::make_shared(); + appInfo->bundleName = "testBundle"; + appInfo->uid = 100; + appInfo->accessTokenId = 1000; + + AppMgrServiceInner::MakeImageRequest request { + .bundleName = "testBundle", + .abilityName = "testAbility", + .userId = 0, + .appCloneIndex = 0 + }; + + auto imageInfo = std::make_shared(); + imageInfo->imagePid = 100; + auto baseAppRecord = std::make_shared(appInfo, 1, "testProcess"); + baseAppRecord->SetInstanceKey("instanceKey"); + baseAppRecord->SetSpecifiedProcessFlag(""); + baseAppRecord->SetCustomProcessFlag(""); + imageInfo->baseAppRecord = baseAppRecord; + appMgrServiceInner->imageInfoMap_[request] = imageInfo; + + AAFwk::MyStatus::GetInstance().checkAppRunningByUid_ = false; + + std::shared_ptr appRecord = nullptr; + appMgrServiceInner->TryToUseImageInfo(abilityInfo, appInfo, nullptr, "callerKey", 0, "testProcess", + "instanceKey", "", "", appRecord); + + TAG_LOGI(AAFwkTag::TEST, "TryToUseImageInfo_NotifyAppRunningStatusEvent_001 end"); +} } // namespace AppExecFwk } // namespace OHOS \ No newline at end of file