diff --git a/frameworks/js/ani/src/ani_base_updater.cpp b/frameworks/js/ani/src/ani_base_updater.cpp index 121c5b20233dd2c6e27b1fba422aa8e31e9eb2dd..5ed5356583b67c69737d5c2321793bc63c957e50 100644 --- a/frameworks/js/ani/src/ani_base_updater.cpp +++ b/frameworks/js/ani/src/ani_base_updater.cpp @@ -30,6 +30,12 @@ void AniBaseUpdater::On(taihe::callback_view taiheCallback(callback); + for (const auto &callbackInfo : callbacks_) { + if (taiheCallback == callbackInfo) { + ENGINE_LOGI("AniBaseUpdater::on ignored, callback is same"); + return; + } + } if (callbacks_.empty()) { RegisterCallback(); } @@ -39,6 +45,10 @@ void AniBaseUpdater::On(taihe::callback_view &callback) { std::unique_lock lock(mutex_); + callbacks_.erase( + std::remove_if(callbacks_.begin(), callbacks_.end(), + [&](const auto &cb) { return cb == callback; }), + callbacks_.end()); if (callbacks_.empty()) { UnRegisterCallback(); }