From ce0d56eacb1752f46b19308701c0b6b4d712fac0 Mon Sep 17 00:00:00 2001 From: w50035674 Date: Mon, 7 Aug 2023 12:14:18 +0000 Subject: [PATCH 1/3] test Signed-off-by: w50035674 Change-Id: I9b4ee8720125db498a6b4d4a7331a2223e6f07a5 --- .../native/ability/native/extension.cpp | 23 ++++++++++- .../native/ability/native/extension_impl.cpp | 39 +++++++++++++++++++ .../ui_extension_ability/js_ui_extension.cpp | 9 +++++ .../kits/native/ability/native/extension.h | 13 +++++++ .../native/ability/native/extension_impl.h | 7 ++++ .../ui_extension_ability/js_ui_extension.h | 1 + .../ui_extension_ability/ui_extension.h | 4 ++ .../src/ability_manager_service.cpp | 2 +- 8 files changed, 95 insertions(+), 3 deletions(-) diff --git a/frameworks/native/ability/native/extension.cpp b/frameworks/native/ability/native/extension.cpp index 4d9445623a7..32f88646775 100644 --- a/frameworks/native/ability/native/extension.cpp +++ b/frameworks/native/ability/native/extension.cpp @@ -20,6 +20,9 @@ #include "extension_context.h" #include "hilog_wrapper.h" #include "hitrace_meter.h" +#include "ability_lifecycle_executor.h" +#include "ability_lifecycle_interface.h" +#include "ability_lifecycle.h" namespace OHOS { namespace AbilityRuntime { @@ -54,9 +57,25 @@ void Extension::OnStart(const AAFwk::Want &want, sptr sessio SetLastRequestWant(want); } -void Extension::OnStop() -{ +void Extension::OnStop(){ HILOG_DEBUG("extension:%{public}s.", abilityInfo_->name.c_str()); + if (abilityLifecycleExecutor_ == nullptr) { + HILOG_ERROR("Ability::OnStop error. abilityLifecycleExecutor_ == nullptr."); + return; + } + abilityLifecycleExecutor_->DispatchLifecycleState(AbilityLifecycleExecutor::LifecycleState::INITIAL); + if (lifecycle_ == nullptr) { + HILOG_ERROR("Ability::OnStop error. lifecycle_ == nullptr."); + return; + } + lifecycle_->DispatchLifecycle(LifeCycle::Event::ON_STOP); + HILOG_DEBUG("%{public}s end", __func__); +} + +void Extension::OnStop(AbilityTransactionCallbackInfo<> *callbackInfo, bool &isAsyncCallback) +{ + isAsyncCallback = false; + OnStop(); } sptr Extension::OnConnect(const AAFwk::Want &want) diff --git a/frameworks/native/ability/native/extension_impl.cpp b/frameworks/native/ability/native/extension_impl.cpp index 4cccd5e70af..f41e54b9e55 100644 --- a/frameworks/native/ability/native/extension_impl.cpp +++ b/frameworks/native/ability/native/extension_impl.cpp @@ -176,6 +176,45 @@ void ExtensionImpl::Stop() HILOG_INFO("ok"); } +void ExtensionImpl::Stop(bool &isAsyncCallback) +{ + HILOG_INFO("call"); + if (extension_ == nullptr) { + HILOG_ERROR("ExtensionImpl::Stop extension_ is nullptr"); + isAsyncCallback = false; + return; + } + + auto *callbackInfo = AppExecFwk::AbilityTransactionCallbackInfo<>::Create(); + if (callbackInfo == nullptr) { + extension_->OnStop(); + lifecycleState_ = AAFwk::ABILITY_STATE_INITIAL; + isAsyncCallback = false; + return; + } + std::weak_ptr weakPtr = shared_from_this(); + auto asyncCallback = [ExtensionImplWeakPtr = weakPtr, state = ABILITY_STATE_INITIAL,&lifecycleState_]() { + auto extensionImpl = ExtensionImplWeakPtr.lock(); + if (extensionImpl == nullptr) { + HILOG_ERROR("extensionImpl is nullptr."); + return; + } + lifecycleState_ = AAFwk::ABILITY_STATE_INITIAL; + extensionImpl->AbilityTransactionCallback(state); + }; + callbackInfo->Push(asyncCallback); + + extension_->OnStop(callbackInfo, isAsyncCallback); + if (!isAsyncCallback) { + lifecycleState_ = AAFwk::ABILITY_STATE_INITIAL; + AppExecFwk::AbilityTransactionCallbackInfo<>::Destroy(callbackInfo); + } + // else: callbackInfo will be destroyed after the async callback + HILOG_DEBUG("%{public}s end.", __func__); +} +void ExtensionImpl::AbilityTransactionCallback(const AAFwk::AbilityLifeCycleState &state) +{} + /** * @brief Connect the extension. and Calling information back to Extension. * diff --git a/frameworks/native/ability/native/ui_extension_ability/js_ui_extension.cpp b/frameworks/native/ability/native/ui_extension_ability/js_ui_extension.cpp index 7c0ca014e01..aa39f1359cc 100755 --- a/frameworks/native/ability/native/ui_extension_ability/js_ui_extension.cpp +++ b/frameworks/native/ability/native/ui_extension_ability/js_ui_extension.cpp @@ -188,6 +188,15 @@ void JsUIExtension::OnStop() CallObjectMethod("onDestroy"); HILOG_DEBUG("JsUIExtension OnStop end."); } +void JsUIExtension::OnStop(AppExecFwk::AbilityTransactionCallbackInfo<> *callbackInfo, bool &isAsyncCallback){ + if (callbackInfo == nullptr) { + isAsyncCallback = false; + OnStop(); + return; + } + //无需异步callback回调 + OnStop(); +} sptr JsUIExtension::OnConnect(const AAFwk::Want &want) { diff --git a/interfaces/kits/native/ability/native/extension.h b/interfaces/kits/native/ability/native/extension.h index a97343e3eb8..3d4ca7c361a 100644 --- a/interfaces/kits/native/ability/native/extension.h +++ b/interfaces/kits/native/ability/native/extension.h @@ -165,6 +165,16 @@ public: * You can override this function to implement your own processing logic. */ virtual void OnStop(); + /** + * @brief Called when this extension enters the STATE_STOP state. + * + * The ability in the STATE_STOP is being destroyed. + * You can override this function to implement your own processing logic. + * + * @param callbackInfo Indicates the lifecycle transaction callback information + * @param isAsyncCallback Indicates whether it is an asynchronous lifecycle callback + */ + virtual void OnStop(AbilityTransactionCallbackInfo<> *callbackInfo, bool &isAsyncCallback); /** * @brief Called when the system configuration is updated. @@ -231,6 +241,9 @@ private: std::shared_ptr launchWant_ = nullptr; std::shared_ptr lastRequestWant_ = nullptr; std::shared_ptr callingInfo_ = nullptr; + + std::shared_ptr lifecycle_ = nullptr; + std::shared_ptr abilityLifecycleExecutor_ = nullptr; }; } // namespace AbilityRuntime } // namespace OHOS diff --git a/interfaces/kits/native/ability/native/extension_impl.h b/interfaces/kits/native/ability/native/extension_impl.h index da545ecc798..475dcc483df 100644 --- a/interfaces/kits/native/ability/native/extension_impl.h +++ b/interfaces/kits/native/ability/native/extension_impl.h @@ -161,6 +161,13 @@ protected: * */ void Stop(); + /** + * @brief Toggles the lifecycle status of Extension to AAFwk::ABILITY_STATE_INITIAL. And notifies the application + * that it belongs to of the lifecycle status. + * @param isAsyncCallback Indicates whether it is an asynchronous lifecycle callback + */ + void Stop(bool &isAsyncCallback); + void AbilityTransactionCallback(const AAFwk::AbilityLifeCycleState &state); /** * @brief Toggles the lifecycle status of Extension to AAFwk::ABILITY_STATE_INACTIVE. And notifies the application diff --git a/interfaces/kits/native/ability/native/ui_extension_ability/js_ui_extension.h b/interfaces/kits/native/ability/native/ui_extension_ability/js_ui_extension.h index b54d95729e8..bf4e4fcdb80 100755 --- a/interfaces/kits/native/ability/native/ui_extension_ability/js_ui_extension.h +++ b/interfaces/kits/native/ability/native/ui_extension_ability/js_ui_extension.h @@ -110,6 +110,7 @@ public: * You can override this function to implement your own processing logic. */ virtual void OnStop() override; + void OnStop(AppExecFwk::AbilityTransactionCallbackInfo<> *callbackInfo, bool &isAsyncCallback) override; /** * @brief Called when the system configuration is updated. diff --git a/interfaces/kits/native/ability/native/ui_extension_ability/ui_extension.h b/interfaces/kits/native/ability/native/ui_extension_ability/ui_extension.h index 30fce0248df..497cf9e51cf 100755 --- a/interfaces/kits/native/ability/native/ui_extension_ability/ui_extension.h +++ b/interfaces/kits/native/ability/native/ui_extension_ability/ui_extension.h @@ -18,6 +18,10 @@ #include "extension_base.h" +#include "ability_lifecycle_executor.h" +#include "ability_lifecycle_interface.h" +#include "ability_transaction_callback_info.h" + namespace OHOS { namespace AbilityRuntime { class UIExtensionContext; diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 867b2330199..ea4c9414e6b 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -151,7 +151,7 @@ bool CheckCallerIsDlpManager(const sptr &bundleManager) return true; } } // namespace - +// using namespace std::chrono; using namespace std::chrono_literals; #ifdef BGTASKMGR_CONTINUOUS_TASK_ENABLE -- Gitee From 70cced1a5aed37c8d532650fcfbdb0cbdc4f81a8 Mon Sep 17 00:00:00 2001 From: w50035674 Date: Tue, 8 Aug 2023 11:27:41 +0000 Subject: [PATCH 2/3] test Change-Id: Ic20564fa719931125e44d3c4b58e5e75111f85e4 --- .vscode/settings.json | 66 +++++++++++++++++++ .../native/ability/native/ability_impl.cpp | 2 +- .../native/ability/native/extension.cpp | 4 +- .../native/ability/native/extension_impl.cpp | 7 +- .../ui_extension_ability/js_ui_extension.cpp | 2 +- 5 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000000..c8ef5f0fe84 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,66 @@ +{ + "files.associations": { + "array": "cpp", + "atomic": "cpp", + "bit": "cpp", + "*.tcc": "cpp", + "bitset": "cpp", + "cctype": "cpp", + "chrono": "cpp", + "cinttypes": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "codecvt": "cpp", + "condition_variable": "cpp", + "csignal": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "list": "cpp", + "map": "cpp", + "set": "cpp", + "unordered_map": "cpp", + "unordered_set": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "optional": "cpp", + "random": "cpp", + "ratio": "cpp", + "regex": "cpp", + "string": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "fstream": "cpp", + "future": "cpp", + "initializer_list": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "mutex": "cpp", + "new": "cpp", + "ostream": "cpp", + "shared_mutex": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "thread": "cpp", + "typeinfo": "cpp" + } +} \ No newline at end of file diff --git a/frameworks/native/ability/native/ability_impl.cpp b/frameworks/native/ability/native/ability_impl.cpp index 2048450b451..a44540960e0 100644 --- a/frameworks/native/ability/native/ability_impl.cpp +++ b/frameworks/native/ability/native/ability_impl.cpp @@ -141,7 +141,7 @@ void AbilityImpl::Stop(bool &isAsyncCallback) }; callbackInfo->Push(asyncCallback); - ability_->OnStop(callbackInfo, isAsyncCallback); + ability_->OnStop(callbackInfo, isAsyncCallback);//该调用没有实现异步。 if (!isAsyncCallback) { StopCallback(); AbilityTransactionCallbackInfo<>::Destroy(callbackInfo); diff --git a/frameworks/native/ability/native/extension.cpp b/frameworks/native/ability/native/extension.cpp index 32f88646775..fa87ed1a2ea 100644 --- a/frameworks/native/ability/native/extension.cpp +++ b/frameworks/native/ability/native/extension.cpp @@ -60,12 +60,12 @@ void Extension::OnStart(const AAFwk::Want &want, sptr sessio void Extension::OnStop(){ HILOG_DEBUG("extension:%{public}s.", abilityInfo_->name.c_str()); if (abilityLifecycleExecutor_ == nullptr) { - HILOG_ERROR("Ability::OnStop error. abilityLifecycleExecutor_ == nullptr."); + HILOG_ERROR("Extension::OnStop error. abilityLifecycleExecutor_ == nullptr."); return; } abilityLifecycleExecutor_->DispatchLifecycleState(AbilityLifecycleExecutor::LifecycleState::INITIAL); if (lifecycle_ == nullptr) { - HILOG_ERROR("Ability::OnStop error. lifecycle_ == nullptr."); + HILOG_ERROR("Extension::OnStop error. lifecycle_ == nullptr."); return; } lifecycle_->DispatchLifecycle(LifeCycle::Event::ON_STOP); diff --git a/frameworks/native/ability/native/extension_impl.cpp b/frameworks/native/ability/native/extension_impl.cpp index f41e54b9e55..7de7cdb2af3 100644 --- a/frameworks/native/ability/native/extension_impl.cpp +++ b/frameworks/native/ability/native/extension_impl.cpp @@ -212,8 +212,13 @@ void ExtensionImpl::Stop(bool &isAsyncCallback) // else: callbackInfo will be destroyed after the async callback HILOG_DEBUG("%{public}s end.", __func__); } + void ExtensionImpl::AbilityTransactionCallback(const AAFwk::AbilityLifeCycleState &state) -{} +{ + HILOG_INFO("call abilityms"); + AAFwk::PacMap restoreData; + AAFwk::AbilityManagerClient::GetInstance()->AbilityTransitionDone(token_, targetState.state, restoreData); +} /** * @brief Connect the extension. and Calling information back to Extension. diff --git a/frameworks/native/ability/native/ui_extension_ability/js_ui_extension.cpp b/frameworks/native/ability/native/ui_extension_ability/js_ui_extension.cpp index aa39f1359cc..0892918c8f3 100755 --- a/frameworks/native/ability/native/ui_extension_ability/js_ui_extension.cpp +++ b/frameworks/native/ability/native/ui_extension_ability/js_ui_extension.cpp @@ -194,7 +194,7 @@ void JsUIExtension::OnStop(AppExecFwk::AbilityTransactionCallbackInfo<> *callbac OnStop(); return; } - //无需异步callback回调 + //无需异步stopcallback释放资源 OnStop(); } -- Gitee From 49a516ded71a60c337bda3201fe90f399df0fb11 Mon Sep 17 00:00:00 2001 From: w50035674 Date: Tue, 15 Aug 2023 11:27:44 +0000 Subject: [PATCH 3/3] onstop_develop Signed-off-by: w50035674 Change-Id: Ia47f496d42b9d527df68facfb44f42b53d4e413c --- .../native/ability/native/extension.cpp | 22 +++++++++---------- .../native/ability/native/extension_impl.cpp | 4 ++-- .../kits/native/ability/native/extension.h | 8 ++++--- .../ui_extension_ability/js_ui_extension.h | 2 +- 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/frameworks/native/ability/native/extension.cpp b/frameworks/native/ability/native/extension.cpp index fa87ed1a2ea..cc196ec6363 100644 --- a/frameworks/native/ability/native/extension.cpp +++ b/frameworks/native/ability/native/extension.cpp @@ -59,20 +59,20 @@ void Extension::OnStart(const AAFwk::Want &want, sptr sessio void Extension::OnStop(){ HILOG_DEBUG("extension:%{public}s.", abilityInfo_->name.c_str()); - if (abilityLifecycleExecutor_ == nullptr) { - HILOG_ERROR("Extension::OnStop error. abilityLifecycleExecutor_ == nullptr."); - return; - } - abilityLifecycleExecutor_->DispatchLifecycleState(AbilityLifecycleExecutor::LifecycleState::INITIAL); - if (lifecycle_ == nullptr) { - HILOG_ERROR("Extension::OnStop error. lifecycle_ == nullptr."); - return; - } - lifecycle_->DispatchLifecycle(LifeCycle::Event::ON_STOP); + // if (abilityLifecycleExecutor_ == nullptr) { + // HILOG_ERROR("Extension::OnStop error. abilityLifecycleExecutor_ == nullptr."); + // return; + // } + // abilityLifecycleExecutor_->DispatchLifecycleState(AppExecFwk::AbilityLifecycleExecutor::LifecycleState::INITIAL); + // if (lifecycle_ == nullptr) { + // HILOG_ERROR("Extension::OnStop error. lifecycle_ == nullptr."); + // return; + // } + // lifecycle_->DispatchLifecycle(AppExecFwk::LifeCycle::Event::ON_STOP); HILOG_DEBUG("%{public}s end", __func__); } -void Extension::OnStop(AbilityTransactionCallbackInfo<> *callbackInfo, bool &isAsyncCallback) +void Extension::OnStop(AppExecFwk::AbilityTransactionCallbackInfo<> *callbackInfo, bool &isAsyncCallback) { isAsyncCallback = false; OnStop(); diff --git a/frameworks/native/ability/native/extension_impl.cpp b/frameworks/native/ability/native/extension_impl.cpp index 7de7cdb2af3..eda7c9b59dc 100644 --- a/frameworks/native/ability/native/extension_impl.cpp +++ b/frameworks/native/ability/native/extension_impl.cpp @@ -193,7 +193,7 @@ void ExtensionImpl::Stop(bool &isAsyncCallback) return; } std::weak_ptr weakPtr = shared_from_this(); - auto asyncCallback = [ExtensionImplWeakPtr = weakPtr, state = ABILITY_STATE_INITIAL,&lifecycleState_]() { + auto asyncCallback = [ExtensionImplWeakPtr = weakPtr, state = AAFwk::ABILITY_STATE_INITIAL,this]() { auto extensionImpl = ExtensionImplWeakPtr.lock(); if (extensionImpl == nullptr) { HILOG_ERROR("extensionImpl is nullptr."); @@ -217,7 +217,7 @@ void ExtensionImpl::AbilityTransactionCallback(const AAFwk::AbilityLifeCycleStat { HILOG_INFO("call abilityms"); AAFwk::PacMap restoreData; - AAFwk::AbilityManagerClient::GetInstance()->AbilityTransitionDone(token_, targetState.state, restoreData); + AAFwk::AbilityManagerClient::GetInstance()->AbilityTransitionDone(token_, state, restoreData); } /** diff --git a/interfaces/kits/native/ability/native/extension.h b/interfaces/kits/native/ability/native/extension.h index 3d4ca7c361a..9d420228cd7 100644 --- a/interfaces/kits/native/ability/native/extension.h +++ b/interfaces/kits/native/ability/native/extension.h @@ -25,6 +25,8 @@ #include "foundation/window/window_manager/interfaces/innerkits/wm/window.h" #include "ui_extension_window_command.h" #include "want.h" +#include "ability_lifecycle_executor.h" +#include "ability_lifecycle_interface.h" namespace OHOS { namespace AppExecFwk { @@ -174,7 +176,7 @@ public: * @param callbackInfo Indicates the lifecycle transaction callback information * @param isAsyncCallback Indicates whether it is an asynchronous lifecycle callback */ - virtual void OnStop(AbilityTransactionCallbackInfo<> *callbackInfo, bool &isAsyncCallback); + virtual void OnStop(AppExecFwk::AbilityTransactionCallbackInfo<> *callbackInfo, bool &isAsyncCallback); /** * @brief Called when the system configuration is updated. @@ -242,8 +244,8 @@ private: std::shared_ptr lastRequestWant_ = nullptr; std::shared_ptr callingInfo_ = nullptr; - std::shared_ptr lifecycle_ = nullptr; - std::shared_ptr abilityLifecycleExecutor_ = nullptr; + std::shared_ptr lifecycle_ = nullptr; + std::shared_ptr abilityLifecycleExecutor_ = nullptr; }; } // namespace AbilityRuntime } // namespace OHOS diff --git a/interfaces/kits/native/ability/native/ui_extension_ability/js_ui_extension.h b/interfaces/kits/native/ability/native/ui_extension_ability/js_ui_extension.h index bf4e4fcdb80..97fac340028 100755 --- a/interfaces/kits/native/ability/native/ui_extension_ability/js_ui_extension.h +++ b/interfaces/kits/native/ability/native/ui_extension_ability/js_ui_extension.h @@ -110,7 +110,7 @@ public: * You can override this function to implement your own processing logic. */ virtual void OnStop() override; - void OnStop(AppExecFwk::AbilityTransactionCallbackInfo<> *callbackInfo, bool &isAsyncCallback) override; + virtual void OnStop(AppExecFwk::AbilityTransactionCallbackInfo<> *callbackInfo, bool &isAsyncCallback) override; /** * @brief Called when the system configuration is updated. -- Gitee