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