我的应用程序需要通知UI声音播放已完成。要实现这一点,请将侦听器附加到SoundChannel对象的SOUND_COMPLETE事件。
我应该在事件处理完成后删除我的SOUND_COMPLETE事件监听器吗?
private function playbackCompleteHandler(event:Event):void {
// Notify UI that playback is done etc
channel.removeEventListener(Event.SOUND_COMPLETE, playbackCompleteHandler);
}
每个人都说我们应该总是删除事件侦听器,以便GC可以正确地收集对象(在这种情况下为'channel'对象)。但似乎Adobe在官方文档[1] [2]
中没有这样做[1] http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/SoundChannel.html [2] http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7d21.html
答案 0 :(得分:2)
Dispatcher拥有听众,因此,如果调度员长寿(如应用程序),则应使用弱侦听器:
channel.removeEventListener(Event.SOUND_COMPLETE, playbackCompleteHandler,false,0, true)
last true
允许释放您的对象。
如果在松开对临时对象的所有引用之后不需要临时对象来处理调度程序的事件,并且在收集临时对象之前,您应该删除侦听器
否则(当调度员是短命的时候),无需关心听众:如果你正在听一些临时的事情,它会死而没有任何问题
看来你的情况是最后一个,所以最好不要用无意义的行来污染代码。
答案 1 :(得分:0)
你有问题陈述我对此的回答
每个人都说我们应该总是删除事件监听器以便GC 可以正确收集物品
如果您不再保留Sound对象的实例;然后删除事件监听器。如果您仍将使用Sound对象;那么就没有必要删除监听器了。