HarmonyOS 鸿蒙Next 自定义类中订阅的eventHub或emitter,如何取消订阅呢?

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

HarmonyOS 鸿蒙Next 自定义类中订阅的eventHub或emitter,如何取消订阅呢?

自定义class,ets文件似乎没有析构函数,类似OC的dealloc或者C++的~MyClass()

那么我在自定义类中订阅的事件,如何在该类销毁时释放呢?

我现在具体需求是,监听app的登录状态,用户登录或退出登录时通知页面刷新,不希望在每个页面写重复代码,所以放在basePageController(自定义类实现,每个页面持有对应的子类控制器)中设置监听和释放?

4 回复
试试emitter.once?

emitter.once11+

once(eventId: string, callback: Callback<EventData>): void

单次订阅指定事件,并在接收到该事件并执行完相应的回调函数后,自动取消订阅。

嗯,确实可以解决一部分问题,但是多次登录、退出的场景似乎解决不了; 或许可以在收到回调后,再订阅一次,哈哈

封装了一个BaseComponent来注册,并通知controller

在HarmonyOS鸿蒙Next中,自定义类中订阅的eventHub或emitter取消订阅的方法通常涉及调用相应的取消订阅函数。以下是一些具体的操作步骤:

对于eventHub:

  • 在需要取消订阅时,可以调用eventHub.off(eventName, callback)方法。其中,eventName是你要取消订阅的事件名称,callback是当初订阅该事件时使用的回调函数。如果省略callback参数,则会取消所有该事件名称的订阅。

对于emitter:

  • 如果你是使用emitter.on进行订阅的,那么取消订阅应使用emitter.off(eventId)。这里的eventId通常是订阅时返回的订阅ID,或者是事件名称(具体取决于emitter的实现)。但请注意,不是所有emitter实现都支持通过事件名称取消订阅,有些可能只支持通过订阅ID取消。

如果在取消订阅时遇到问题,请确保你提供的事件名称或订阅ID与订阅时的一致。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部