diff --git a/frameworks/kits/ability/ability_runtime/include/connection_manager.h b/frameworks/kits/ability/ability_runtime/include/connection_manager.h index 2969e0ee95..1638079e3d 100755 --- a/frameworks/kits/ability/ability_runtime/include/connection_manager.h +++ b/frameworks/kits/ability/ability_runtime/include/connection_manager.h @@ -115,6 +115,9 @@ private: bool IsConnectCallerEqual(const sptr &connectCaller, const sptr &connectCallerOther); bool IsConnectReceiverEqual(const AppExecFwk::ElementName &connectReceiver, const AppExecFwk::ElementName &connectReceiverOther); + ErrCode HandleCallbackTimeOut(const sptr &connectCaller, const AAFwk::Want &want, + const AppExecFwk::ElementName &connectReceiver, sptr abilityConnection, + const sptr &connectCallback); std::map>> abilityConnections_; }; } // namespace AbilityRuntime diff --git a/frameworks/kits/ability/ability_runtime/src/connection_manager.cpp b/frameworks/kits/ability/ability_runtime/src/connection_manager.cpp index dbb80fac84..6656100f5d 100755 --- a/frameworks/kits/ability/ability_runtime/src/connection_manager.cpp +++ b/frameworks/kits/ability/ability_runtime/src/connection_manager.cpp @@ -61,17 +61,7 @@ ErrCode ConnectionManager::ConnectAbility(const sptr &connectCall abilityConnection->GetResultCode()); return ERR_OK; } else { - if (abilityConnection->GetRemoteObject() == nullptr) { - while (true) { - if (abilityConnection->GetRemoteObject() != nullptr) { - connectCallback->OnAbilityConnectDone(connectReceiver, abilityConnection->GetRemoteObject(), - abilityConnection->GetResultCode()); - return ERR_OK; - } - } - - } - return AAFwk::AbilityManagerClient::GetInstance()->ConnectAbility(want, abilityConnection, connectCaller); + return HandleCallbackTimeOut(connectCaller, want, connectReceiver, abilityConnection, connectCallback); } } else { abilityConnection = new AbilityConnection(connectCallback); @@ -208,5 +198,22 @@ bool ConnectionManager::IsConnectReceiverEqual(const AppExecFwk::ElementName &co return connectReceiver.GetBundleName() == connectReceiverOther.GetBundleName() && connectReceiver.GetAbilityName() == connectReceiverOther.GetAbilityName(); } + +ErrCode ConnectionManager::HandleCallbackTimeOut(const sptr &connectCaller, const AAFwk::Want &want, + const AppExecFwk::ElementName &connectReceiver, sptr abilityConnection, + const sptr &connectCallback) +{ + if (abilityConnection->GetRemoteObject() == nullptr) { + while (true) { + if (abilityConnection->GetRemoteObject() != nullptr) { + connectCallback->OnAbilityConnectDone(connectReceiver, abilityConnection->GetRemoteObject(), + abilityConnection->GetResultCode()); + return ERR_OK; + } + } + } else { + return AAFwk::AbilityManagerClient::GetInstance()->ConnectAbility(want, abilityConnection, connectCaller); + } +} } // namespace AbilityRuntime } // namespace OHOS