From f428ad3aa754708a6c5eba1a1473d4b9f374f716 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E4=BA=AE?= Date: Tue, 25 Oct 2022 11:45:15 +0800 Subject: [PATCH] =?UTF-8?q?IssueNo:=20#I5XIUE=20Description:=20=E5=A4=9A?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E6=93=8D=E4=BD=9Ccallback=5F=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E5=B4=A9=E6=BA=83=20Sig:=20SIG=5FApplicationFramework?= =?UTF-8?q?=20Feature=20or=20Bugfix:=20Bugfix=20Binary=20Source:=20No?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 杨亮 Change-Id: I9c908e4dfc2598ede2b8f4e50eff1f0199e6550a --- .../context/application_context.cpp | 14 +++++++++++++- .../ability_runtime/context/application_context.h | 3 ++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/frameworks/native/appkit/ability_runtime/context/application_context.cpp b/frameworks/native/appkit/ability_runtime/context/application_context.cpp index bd123088b4..06827e7747 100644 --- a/frameworks/native/appkit/ability_runtime/context/application_context.cpp +++ b/frameworks/native/appkit/ability_runtime/context/application_context.cpp @@ -42,6 +42,7 @@ void ApplicationContext::RegisterAbilityLifecycleCallback( if (abilityLifecycleCallback == nullptr) { return; } + std::lock_guard lock(callbackLock_); callbacks_.push_back(abilityLifecycleCallback); } @@ -49,14 +50,16 @@ void ApplicationContext::UnregisterAbilityLifecycleCallback( const std::shared_ptr &abilityLifecycleCallback) { HILOG_DEBUG("ApplicationContext UnregisterAbilityLifecycleCallback"); + std::lock_guard lock(callbackLock_); auto it = std::find(callbacks_.begin(), callbacks_.end(), abilityLifecycleCallback); if (it != callbacks_.end()) { callbacks_.erase(it); } } -bool ApplicationContext::IsAbilityLifecycleCallbackEmpty() const +bool ApplicationContext::IsAbilityLifecycleCallbackEmpty() { + std::lock_guard lock(callbackLock_); return callbacks_.empty(); } @@ -86,6 +89,7 @@ void ApplicationContext::DispatchOnAbilityCreate(const std::shared_ptr lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityCreate(ability); @@ -100,6 +104,7 @@ void ApplicationContext::DispatchOnWindowStageCreate(const std::shared_ptr lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWindowStageCreate(ability, windowStage); @@ -114,6 +119,7 @@ void ApplicationContext::DispatchOnWindowStageDestroy(const std::shared_ptr lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWindowStageDestroy(ability, windowStage); @@ -129,6 +135,7 @@ void ApplicationContext::DispatchWindowStageFocus(const std::shared_ptr lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWindowStageActive(ability, windowStage); @@ -144,6 +151,7 @@ void ApplicationContext::DispatchWindowStageUnfocus(const std::shared_ptr lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWindowStageInactive(ability, windowStage); @@ -157,6 +165,7 @@ void ApplicationContext::DispatchOnAbilityDestroy(const std::shared_ptr lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityDestroy(ability); @@ -170,6 +179,7 @@ void ApplicationContext::DispatchOnAbilityForeground(const std::shared_ptr lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityForeground(ability); @@ -183,6 +193,7 @@ void ApplicationContext::DispatchOnAbilityBackground(const std::shared_ptr lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityBackground(ability); @@ -196,6 +207,7 @@ void ApplicationContext::DispatchOnAbilityContinue(const std::shared_ptr lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityContinue(ability); diff --git a/interfaces/kits/native/appkit/ability_runtime/context/application_context.h b/interfaces/kits/native/appkit/ability_runtime/context/application_context.h index b8d6d1fe77..9e66d8c58c 100644 --- a/interfaces/kits/native/appkit/ability_runtime/context/application_context.h +++ b/interfaces/kits/native/appkit/ability_runtime/context/application_context.h @@ -32,7 +32,7 @@ public: ~ApplicationContext() = default; void RegisterAbilityLifecycleCallback(const std::shared_ptr &abilityLifecycleCallback); void UnregisterAbilityLifecycleCallback(const std::shared_ptr &abilityLifecycleCallback); - bool IsAbilityLifecycleCallbackEmpty() const; + bool IsAbilityLifecycleCallbackEmpty(); void RegisterEnvironmentCallback(const std::shared_ptr &environmentCallback); void UnregisterEnvironmentCallback(const std::shared_ptr &environmentCallback); void DispatchOnAbilityCreate(const std::shared_ptr &ability); @@ -83,6 +83,7 @@ private: std::shared_ptr contextImpl_; static std::vector> callbacks_; static std::vector> envCallbacks_; + std::mutex callbackLock_; }; } // namespace AbilityRuntime } // namespace OHOS