2010年5月14日 星期五

2010年5月13日 星期四

unloadAndStop

Adobe發佈了FlashPlayer10 Beta2。關鍵的更新之一是給Loader加入新的unloadAndStop。有人可能不明白為什麼Loader有unload,還要新加一個 unloadAndStop。主要是unload沒有清除載入swf中播放的聲音,所以要用SoundMixer.stopAll()處理。但會發現在幾個Loader之間來回切換(切換時都會unload上一個swf),FP佔用的記憶體會持 續增長,即使切換到沒有Loader的頁面,記憶體佔用也沒有減少。試了很多辦法,發現只有停止被載入內容裏所有的Event和媒體播放(包括 MovieCip),才能成功的進行卸載。在網上google了一下,發現這是FP9垃圾回收機制的一個Bug。如果沒有及時有效的清理掉記憶體中的垃圾,一個稍微複雜點的網站都有可能讓Borwser掛掉。

還好,這次的FP更新中Adobe及時的做了補救。unloadAndStop會以遞迴的形式關閉被載入內容中所有的Event、聲音和Netstream等等物件,從而使被卸載內容更快的被垃圾處理器清除。可惜FP9中仍然不能簡單快速的清理記憶體中的垃圾。