diff --git a/window_scene/screen_session_manager/src/connection/screen_session_ability_connection.cpp b/window_scene/screen_session_manager/src/connection/screen_session_ability_connection.cpp index af55e74df936ee0d4326df298b46492c054fcb55..d67bddaa3679f4bbf352005262a6165140434f0e 100644 --- a/window_scene/screen_session_manager/src/connection/screen_session_ability_connection.cpp +++ b/window_scene/screen_session_manager/src/connection/screen_session_ability_connection.cpp @@ -223,6 +223,10 @@ bool ScreenSessionAbilityConnection::ScreenSessionConnectExtension(const std::st TLOGI(WmsLogTag::DMS, "bundleName:%{public}s, abilityName:%{public}s", bundleName.c_str(), abilityName.c_str()); OHOS::sptr systemAbilityManager = OHOS::SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); + if (systemAbilityManager == nullptr) { + TLOGE(WmsLogTag::DMS, "GetSystemAbilityManager failed"); + return false; + } OHOS::sptr remoteObject = systemAbilityManager->GetSystemAbility(BUNDLE_MGR_SERVICE_SYS_ABILITY_ID); if (remoteObject == nullptr) { diff --git a/window_scene/screen_session_manager_client/BUILD.gn b/window_scene/screen_session_manager_client/BUILD.gn index d3bf76651e5041cad4664d2f5fc0cfc699c501b7..6257b70fab6ae127fe398d442b1833c211c1fb50 100644 --- a/window_scene/screen_session_manager_client/BUILD.gn +++ b/window_scene/screen_session_manager_client/BUILD.gn @@ -38,6 +38,7 @@ ohos_shared_library("screen_session_manager_client") { } sources = [ "../screen_session_manager/src/zidl/screen_session_manager_proxy.cpp", + "../session_manager/src/ffrt_queue_helper.cpp", "src/screen_session_manager_client.cpp", "src/zidl/screen_session_manager_client_stub.cpp", ] @@ -52,6 +53,7 @@ ohos_shared_library("screen_session_manager_client") { external_deps = [ "c_utils:utils", + "ffrt:libffrt", "graphic_2d:librender_service_base", "graphic_2d:librender_service_client", "hilog:libhilog", diff --git a/window_scene/screen_session_manager_client/include/screen_session_manager_client.h b/window_scene/screen_session_manager_client/include/screen_session_manager_client.h index be9a5f96651fcc071a25152ddb562aba788f049c..0eef72198f91d4f514a2bea53683b1ce76125a16 100644 --- a/window_scene/screen_session_manager_client/include/screen_session_manager_client.h +++ b/window_scene/screen_session_manager_client/include/screen_session_manager_client.h @@ -26,6 +26,7 @@ #include "display_change_info.h" #include "dm_common.h" #include "session/screen/include/screen_session.h" +#include "session_manager/include/ffrt_queue_helper.h" #include "interfaces/include/ws_common.h" #include "wm_single_instance.h" #include "zidl/screen_session_manager_client_stub.h" @@ -180,6 +181,8 @@ private: sptr screenSessionManager_; + std::shared_ptr ffrtQueueHelper_ = std::make_shared(); + IScreenConnectionListener* screenConnectionListener_; sptr screenConnectionChangeListener_; sptr displayChangeListener_; diff --git a/window_scene/screen_session_manager_client/src/screen_session_manager_client.cpp b/window_scene/screen_session_manager_client/src/screen_session_manager_client.cpp index 6c3a7e408dc246bf2aba2d7cab7a6e4012604e72..27998b4db258a72991652a94bfde07f3cc2f3979 100644 --- a/window_scene/screen_session_manager_client/src/screen_session_manager_client.cpp +++ b/window_scene/screen_session_manager_client/src/screen_session_manager_client.cpp @@ -1249,12 +1249,17 @@ std::string ScreenSessionManagerClient::OnDumperClientScreenSessions() void ScreenSessionManagerClient::SetDefaultMultiScreenModeWhenSwitchUser() { - if (!screenSessionManager_) { - TLOGE(WmsLogTag::DMS, "screenSessionManager_ is null"); + wptr screenSessionManagerWptr = screenSessionManager_; + auto task = [screenSessionManagerWptr] { + auto screenSessionManager = screenSessionManagerWptr.promote(); + if (!screenSessionManager) { + TLOGE(WmsLogTag::DMS, "screenSessionManager_ is null"); + return; + } + screenSessionManager->SetDefaultMultiScreenModeWhenSwitchUser(); return; - } - screenSessionManager_->SetDefaultMultiScreenModeWhenSwitchUser(); - return; + }; + ffrtQueueHelper_->SubmitTask(std::move(task)); } void ScreenSessionManagerClient::NotifyExtendScreenCreateFinish()