HarmonyOS 鸿蒙Next 自定义类中订阅的eventHub或emitter,如何取消订阅呢?
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。