From 20a9b8563d95e68bf2975e28de4336cadd9b426a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E8=8F=B2=E5=A2=A8?= Date: Fri, 13 Feb 2026 16:29:55 +0800 Subject: [PATCH] =?UTF-8?q?sendResultBackToCaller=E5=9C=BA=E6=99=AF?= =?UTF-8?q?=E8=A7=A3=E9=99=A4=E4=B8=8A=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 朱菲墨 --- .../include/ability_record/caller_record.h | 8 +++++ .../src/ability_manager_service.cpp | 7 ++--- services/abilitymgr/src/ability_record.cpp | 31 +++++++++++-------- .../ui_ability_lifecycle_manager.cpp | 1 - 4 files changed, 28 insertions(+), 19 deletions(-) diff --git a/services/abilitymgr/include/ability_record/caller_record.h b/services/abilitymgr/include/ability_record/caller_record.h index eb1d64dcd8..a9777825c0 100644 --- a/services/abilitymgr/include/ability_record/caller_record.h +++ b/services/abilitymgr/include/ability_record/caller_record.h @@ -26,6 +26,9 @@ namespace OHOS { namespace AAFwk { class AbilityRecord; +namespace { +constexpr int32_t DEFAULT_REQUEST_CODE = -1; +} /** * @struct CallerAbilityInfo @@ -143,6 +146,11 @@ public: { return requestCodeSet_; } + bool HasForResultRequestCode() + { + return std::any_of(requestCodeSet_.begin(), requestCodeSet_.end(), + [](int32_t requestCode) { return requestCode != DEFAULT_REQUEST_CODE; }); + } private: int32_t requestCode_ = -1; // requestCode of for-result start mode diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 17f307ca21..d0a34c1496 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -332,7 +332,6 @@ constexpr const char* SCENEBOARD_BUNDLE_NAME = "com.ohos.sceneboard"; constexpr const char* SPECIFY_TOKEN_ID = "specifyTokenId"; constexpr const char* PROCESS_SUFFIX = "embeddable"; constexpr int32_t DEFAULT_DMS_MISSION_ID = -1; -constexpr int32_t DEFAULT_REQUEST_CODE = -1; constexpr const char* PARAM_PREVENT_STARTABILITY = "persist.sys.abilityms.prevent_startability"; constexpr const char* SUSPEND_SERVICE_CONFIG_FILE = "/etc/efficiency_manager/prevent_startability_whitelist.json"; constexpr const char* VPN_ALLOWLIST_CONFIG_FILE = "/etc/ability_runtime/vpn_startability_allowlist.json"; @@ -9109,12 +9108,12 @@ void AbilityManagerService::RetrySubscribeUnlockedEvent(int32_t retryCount, auto retrySubscribeScreenUnlockedEventTask = [aams = weak_from_this(), unlockedEventSubscriber = subscriber, retryCount, isUserUnlock = isUserUnlockSubscriber]() { CHECK_POINTER_LOG(unlockedEventSubscriber, "unlockedEventSubscriber nullptr"); - bool subResult = EventFwk::CommonEventManager::SubscribeCommonEvent(unlockedEventSubscriber); auto obj = aams.lock(); if (obj == nullptr) { TAG_LOGE(AAFwkTag::ABILITYMGR, "retry subscribe screen unlocked event, obj null"); return; } + bool subResult = EventFwk::CommonEventManager::SubscribeCommonEvent(unlockedEventSubscriber); if (subResult) { if (!isUserUnlock) { obj->isSubscribed_ = true; @@ -9126,9 +9125,7 @@ void AbilityManagerService::RetrySubscribeUnlockedEvent(int32_t retryCount, obj->RetrySubscribeUnlockedEvent(retryCount - 1, unlockedEventSubscriber, isUserUnlock); return; } - if (!retryCount) { - TAG_LOGE(AAFwkTag::ABILITYMGR, "SU life, subscribe err:%{public}d", isUserUnlock); - } + TAG_LOGE(AAFwkTag::ABILITYMGR, "SU life, subscribe err:%{public}d", isUserUnlock); }; constexpr int32_t delaytime = 200 * 1000; // us ffrt::submit(std::move(retrySubscribeScreenUnlockedEventTask), diff --git a/services/abilitymgr/src/ability_record.cpp b/services/abilitymgr/src/ability_record.cpp index 0048399276..6678192dce 100644 --- a/services/abilitymgr/src/ability_record.cpp +++ b/services/abilitymgr/src/ability_record.cpp @@ -111,7 +111,6 @@ const int32_t SHELL_ASSISTANT_DIETYPE = 0; std::atomic AbilityRecord::abilityRecordId = 0; const int32_t DEFAULT_USER_ID = 0; const int32_t SEND_RESULT_CANCELED = -1; -const int32_t DEFAULT_REQUEST_CODE = -1; const int VECTOR_SIZE = 2; const int LOAD_TIMEOUT_ASANENABLED = 150; const int TERMINATE_TIMEOUT_ASANENABLED = 150; @@ -1307,10 +1306,6 @@ void AbilityRecord::SendResultByBackToCaller(const std::shared_ptrSendResult(result->requestCode_, result->resultCode_, result->resultWant_); - if (GetCallerInfo() != nullptr) { - DelayedSingleton::GetInstance()->AbilityRemovePidConnection( - GetCallerInfo()->callerPid, GetPid(), GetAbilityRecordId()); - } } void AbilityRecord::SendSandboxSavefileResult(const Want &want, int resultCode, int requestCode) @@ -1539,17 +1534,27 @@ void AbilityRecord::RemoveCallerRequestCode(std::shared_ptr calle TAG_LOGI(AAFwkTag::ABILITYMGR, "null record"); return; } - std::lock_guard guard(callerListLock_); - for (auto it = callerList_.begin(); it != callerList_.end(); it++) { - if ((*it)->GetCaller() == callerAbilityRecord) { - (*it)->RemoveHistoryRequestCode(requestCode); - if ((*it)->GetRequestCodeSet().empty()) { - callerList_.erase(it); - TAG_LOGI(AAFwkTag::ABILITYMGR, "remove callerRecord"); + bool removePidConnection = false; + { + std::lock_guard guard(callerListLock_); + for (auto it = callerList_.begin(); it != callerList_.end(); it++) { + if ((*it) != nullptr && (*it)->GetCaller() == callerAbilityRecord) { + (*it)->RemoveHistoryRequestCode(requestCode); + if (!(*it)->HasForResultRequestCode()) { + removePidConnection = true; + } + if ((*it)->GetRequestCodeSet().empty()) { + callerList_.erase(it); + TAG_LOGI(AAFwkTag::ABILITYMGR, "remove callerRecord"); + } + break; } - return; } } + if (removePidConnection) { + DelayedSingleton::GetInstance()->AbilityRemovePidConnection( + callerAbilityRecord->GetPid(), GetPid(), GetAbilityRecordId()); + } } void AbilityRecord::AddCallerRecord(const sptr &callerToken, int requestCode, const Want &want, 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 3b1d79d064..51b5ae250f 100644 --- a/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp +++ b/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp @@ -75,7 +75,6 @@ constexpr int32_t START_UI_ABILITY_PER_SECOND_UPPER_LIMIT = 20; constexpr int32_t API20 = 20; constexpr int32_t API_VERSION_MOD = 100; constexpr int32_t REQUEST_LIST_ID_INIT = -1; -constexpr int32_t DEFAULT_REQUEST_CODE = -1; constexpr const char* IS_CALLING_FROM_DMS = "supportCollaborativeCallingFromDmsInAAFwk"; constexpr int REMOVE_STARTING_BUNDLE_TIMEOUT_MICRO_SECONDS = 5000000; // 5s constexpr int32_t BY_CALL_TIMEOUT = 10 * 1000 * 1000; // 10s