From 5126beceee8df19b1a38b7cb8ff560cd2ffc90f5 Mon Sep 17 00:00:00 2001 From: savior-xzh Date: Thu, 12 Jun 2025 16:07:29 +0800 Subject: [PATCH] preparetermiante Signed-off-by: savior-xzh Change-Id: I4b86451855f7f433c2eb09869093d8b2e513afef --- .../ui_ability_lifecycle_manager.cpp | 28 +++++++++++-------- services/appmgr/src/app_mgr_service_inner.cpp | 1 + 2 files changed, 18 insertions(+), 11 deletions(-) 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 d0d27f9742a..482e1d5980f 100644 --- a/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp +++ b/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp @@ -3152,23 +3152,29 @@ int32_t UIAbilityLifecycleManager::TryPrepareTerminateByPids(const std::vector::GetInstance()->BlockProcessCacheByPids(pids)); + auto task = [pids]() { + IN_PROCESS_CALL_WITHOUT_RET(DelayedSingleton::GetInstance()->BlockProcessCacheByPids(pids)); + } + ffrt::submit(task); for (const auto &pid : pids) { - std::unordered_set> abilitysToTerminate; std::vector> tokens; IN_PROCESS_CALL_WITHOUT_RET( DelayedSingleton::GetInstance()->GetAbilityRecordsByProcessID(pid, tokens)); - for (const auto &token : PrepareTerminateAppAndGetRemaining(pid, tokens)) { - auto abilityRecord = Token::GetAbilityRecordByToken(token); - if (PrepareTerminateAbility(abilityRecord, true)) { - TAG_LOGI(AAFwkTag::ABILITYMGR, "terminate blocked"); - continue; + auto terminateTask = [pid, tokens]() { + std::unordered_set> abilitysToTerminate; + for (const auto &token : PrepareTerminateAppAndGetRemaining(pid, tokens)) { + auto abilityRecord = Token::GetAbilityRecordByToken(token); + if (PrepareTerminateAbility(abilityRecord, true)) { + TAG_LOGI(AAFwkTag::ABILITYMGR, "terminate blocked"); + continue; + } + abilitysToTerminate.emplace(abilityRecord); + } + for (const auto &abilityRecord : abilitysToTerminate) { + TerminateSession(abilityRecord); } - abilitysToTerminate.emplace(abilityRecord); - } - for (const auto &abilityRecord : abilitysToTerminate) { - TerminateSession(abilityRecord); } + ffrt::submit(terminateTask); } TAG_LOGI(AAFwkTag::ABILITYMGR, "end."); return ERR_OK; diff --git a/services/appmgr/src/app_mgr_service_inner.cpp b/services/appmgr/src/app_mgr_service_inner.cpp index ad20c3fc056..756d19278ae 100644 --- a/services/appmgr/src/app_mgr_service_inner.cpp +++ b/services/appmgr/src/app_mgr_service_inner.cpp @@ -5863,6 +5863,7 @@ int AppMgrServiceInner::GetAbilityRecordsByProcessID(const int pid, std::vector< for (auto &item : appRecord->GetAbilities()) { tokens.emplace_back(item.first); } + appRecord->SetTerminating(); return ERR_OK; } -- Gitee