diff --git a/foundations/ability/sa_loader/include/base_service_kits_impl.h b/foundations/ability/sa_loader/include/base_service_kits_impl.h index c3e5ae021f59dbfab54bf0338fa67d12cf2f83b1..5fc14df11c1390d1fd08dbb37ee5683b6fdb17ed 100644 --- a/foundations/ability/sa_loader/include/base_service_kits_impl.h +++ b/foundations/ability/sa_loader/include/base_service_kits_impl.h @@ -41,6 +41,7 @@ protected: sptr GetService(); void ResetRemoteService(); virtual void RegisterCallback(){}; + virtual void ResetService(const wptr &remote); protected: std::recursive_mutex remoteServerLock_; @@ -50,7 +51,6 @@ protected: private: void AddDeathRecipient(const sptr &object); - void ResetService(const wptr &remote); private: bool isNeedAddDeathRecipient_ = true; diff --git a/interfaces/inner_api/engine/include/update_service_kits_impl.h b/interfaces/inner_api/engine/include/update_service_kits_impl.h index 2409f2d014786ba3d7516581e9e7dfca29807189..f04b110539420ab14a29ae1ee4417f90b08b57a7 100644 --- a/interfaces/inner_api/engine/include/update_service_kits_impl.h +++ b/interfaces/inner_api/engine/include/update_service_kits_impl.h @@ -88,12 +88,14 @@ public: protected: void RegisterCallback() override; + void ResetService(const wptr &remote) override; #ifndef UPDATER_UT private: #endif std::map> remoteUpdateCallbackMap_; UpgradeInfo upgradeInfo_{}; + int32_t retryTimes_ = 0; }; } // namespace OHOS::UpdateEngine #endif // UPDATE_SERVICE_KITS_IMPL_H diff --git a/interfaces/inner_api/engine/src/update_service_kits_impl.cpp b/interfaces/inner_api/engine/src/update_service_kits_impl.cpp index ada4fe92b9db027f854829e0e3d87b43567cf66e..060b288883b98b9ebc356544a4acbd706ec6e5cc 100644 --- a/interfaces/inner_api/engine/src/update_service_kits_impl.cpp +++ b/interfaces/inner_api/engine/src/update_service_kits_impl.cpp @@ -270,4 +270,18 @@ void UpdateServiceKitsImpl::RegisterCallback() remoteServer_->RegisterUpdateCallback(iter.first, iter.second); } } + +void UpdateServiceKitsImpl::ResetService(const wptr &remote) +{ + BaseServiceKitsImpl::ResetService(remote); + constexpr int32_t retryMaxTimes = 3; + ENGINE_LOGI("ResetService, remoteUpdateCallbackMap_: %{public}zu, retryTimes_: %{public}d", + remoteUpdateCallbackMap_.size(), retryTimes_); + if (!remoteUpdateCallbackMap_.empty() && retryTimes_ < retryMaxTimes) { + ENGINE_LOGI("ResetService, need resume register callback"); + auto updateService = GetService(); // 重新连接注册回调 + retryTimes_++; + ENGINE_LOGI("ResetService, reconnect service %{public}s", (updateService != nullptr) ? "success" : "fail"); + } +} } // namespace OHOS::UpdateEngine