HarmonyOS 鸿蒙Next下使用eventHub事件重复订阅问题:如何避免在off callback取消订阅后,再次打开订阅界面时的重复订阅

发布于 1周前 作者 bupafengyu 来自 鸿蒙OS

HarmonyOS 鸿蒙Next下使用eventHub事件重复订阅问题:如何避免在off callback取消订阅后,再次打开订阅界面时的重复订阅 订阅界面A 订阅界面B A跳转B 如果B在aboutToDisappear直接off 发现会把订阅事件直接取消掉 后来在B中用off callback 这样就可以只取消B界面的订阅事件,现在出现了一个问题 就是我退出B后再点击进去B 发现B界面订阅了两次事件 重复退出进入会B界面 会一直订阅,导致一次事件在B界面会接收多次 这种情况要怎么解决

5 回复

可以尝试一下发布订阅来处理

更多关于HarmonyOS 鸿蒙Next下使用eventHub事件重复订阅问题:如何避免在off callback取消订阅后,再次打开订阅界面时的重复订阅的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我用harmony-utils EmitterUtil是可以了 这eventHub是没解决办法吗,

代码怎么写的啊

  • getContext(this).eventHub.on(EventHubConfig.EVENT_TABLE_ROW_ONCLICK_INDEX,this.TableClick.bind(this));
  • getContext(this).eventHub.off(EventHubConfig.EVENT_TABLE_ROW_ONCLICK_INDEX,this.TableClick);
TableClick(bean: TableIteanClickBean) {
  if (bean.isComeFrom === AdvancedSearchEnum.AchievementReportShoppePage) {
    console.log(`:${bean.index}`)
  }
}

在HarmonyOS鸿蒙Next系统中,若要避免在eventHuboff callback取消订阅后,再次打开订阅界面时的重复订阅问题,可以通过以下方式实现:

  1. 状态管理:在应用程序中维护一个全局或局部状态变量,用于标记当前是否已经订阅了某个事件。在订阅事件前,先检查该状态变量。如果已订阅,则不进行重复订阅。

  2. 唯一标识符:为每次订阅分配一个唯一的标识符(如UUID)。在取消订阅时,使用此标识符确保只取消对应的订阅。在重新订阅时,检查是否存在相同的标识符,如果存在,则不进行订阅。

  3. 事件监听器管理:使用事件监听器管理器来跟踪所有活动的事件监听器。在取消订阅时,从管理器中移除对应的监听器。在重新订阅前,检查管理器中是否已存在该监听器。

  4. 界面生命周期管理:在界面的生命周期方法(如onResumeonPause)中管理订阅和取消订阅的逻辑。确保在界面恢复时检查订阅状态,避免重复订阅。

通过上述方法,可以有效避免在HarmonyOS鸿蒙Next系统中使用eventHub时的重复订阅问题。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部