diff --git a/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp b/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp index 9f1f47c16f494fe7d25861b3d9afe9e8f4333a70..958216946ec9b60acdbbde2e74b51e2988c1bd0e 100644 --- a/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp +++ b/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp @@ -260,6 +260,10 @@ RosenRenderContext::~RosenRenderContext() void RosenRenderContext::DetachModifiers() { + auto pipeline = PipelineContext::GetCurrentContextPtrSafelyWithCheck(); + if (pipeline && densityChangedCallbackId_ != DEFAULT_CALLBACK_ID) { + pipeline->UnregisterDensityChangedCallback(densityChangedCallbackId_); + } CHECK_NULL_VOID(rsNode_ && rsNode_->GetType() == Rosen::RSUINodeType::SURFACE_NODE); if (transitionEffect_) { transitionEffect_->Detach(this); @@ -273,11 +277,7 @@ void RosenRenderContext::DetachModifiers() if (scaleXYUserModifier_) { rsNode_->RemoveModifier(scaleXYUserModifier_); } - auto pipeline = PipelineContext::GetCurrentContextPtrSafelyWithCheck(); if (pipeline) { - if (densityChangedCallbackId_ != -1) { - pipeline->UnregisterDensityChangedCallback(densityChangedCallbackId_); - } pipeline->RequestFrame(); } } @@ -2378,7 +2378,7 @@ void RosenRenderContext::SetBorderRadius(const BorderRadiusProperty& value) void RosenRenderContext::OnBorderRadiusUpdate(const BorderRadiusProperty& value) { - if (densityChangedCallbackId_ == -1) { + if (densityChangedCallbackId_ == DEFAULT_CALLBACK_ID) { auto context = GetPipelineContext(); CHECK_NULL_VOID(context); densityChangedCallbackId_ = context->RegisterDensityChangedCallback( diff --git a/frameworks/core/components_ng/render/adapter/rosen_render_context.h b/frameworks/core/components_ng/render/adapter/rosen_render_context.h index 4390f7b2e484a90073b24599a7f6adfaac34bfe0..1749d63bd0bfb0d36ed2279b2e4b6a6fabd49b7e 100755 --- a/frameworks/core/components_ng/render/adapter/rosen_render_context.h +++ b/frameworks/core/components_ng/render/adapter/rosen_render_context.h @@ -663,7 +663,8 @@ protected: int appearingTransitionCount_ = 0; int disappearingTransitionCount_ = 0; int sandBoxCount_ = 0; - int32_t densityChangedCallbackId_ = -1; + int32_t densityChangedCallbackId_ = DEFAULT_CALLBACK_ID; + static constexpr int32_t DEFAULT_CALLBACK_ID = -1; static constexpr int32_t INVALID_PARENT_ID = -2100000; static constexpr uint32_t DRAW_REGION_RECT_COUNT = 7; std::map> particleImageContextMap_;