3

AS3 youtube プレーヤーを使用するとメモリ リークが発生します。すべてのリスナーが削除されます。解決策を見つけるのを手伝ってください。

public class YoutubeStreamTest extends Sprite
{
    private var _loader : Loader;
    private var _player : Object;
    private var _spr : Sprite;

    // constructor -----------------------------------------
    public function YoutubeStreamTest()
    {
        addEventListener(Event.ADDED_TO_STAGE, hAddedToStage);
    }

    // methods ---------------------------------------------

動画の読み込みを開始

    private function startVideo() : void {
        _loader = new Loader();
        _loader.contentLoaderInfo.addEventListener(Event.INIT, hLoaderInit, false, 0, true);
        _loader.load(new URLRequest("http://www.youtube.com/v/FooZ5x-OX0E?version=3&controls=0&showinfo=0&end=3")); //yPrHf776eWA = the vid u want t play
    }

    // handlers --------------------------------------------

ビデオの準備が整うのを待っています

    private function hLoaderInit(event : Event) : void {
        _loader.contentLoaderInfo.removeEventListener(Event.INIT, hLoaderInit);
        _player = _loader.content;
        _player.addEventListener("onReady", hPlayerReady, false, 0, true);
        addChild(_player as DisplayObject);
        _player.x = 0;
        _player.y = 20;

        _spr = new Sprite();
        _spr.graphics.beginFill(0x0, .1);
        _spr.graphics.drawRect(0, 0, 500, 500);
        _spr.graphics.endFill();
        addChild(_spr);
    }

準備完了 - プレイ開始

    private function hPlayerReady(event : Event) : void 
    {
        _player.removeEventListener("onReady", hPlayerReady);
        _player.setSize(440, 260);
        _player.playVideo();
    }

    private function hAddedToStage(event : Event) : void {
        Security.allowInsecureDomain("*");
        Security.allowDomain("*");
        startVideo();

        addEventListener(MouseEvent.CLICK, hClick);
    }

クリックして新しいビデオ インスタンスを読み込む

    private function hClick(event : Event) : void {
        removeEventListener(Event.ADDED_TO_STAGE, hAddedToStage);
        if(_player) {
            removeChild(_player as DisplayObject);
            _player.destroy();
            removeChild(_spr);
            _loader.unloadAndStop(true);
        }
        startVideo();
    }

    // getsetters ------------------------------------------


}
4

1 に答える 1

0

クリックリスナーはどうですか、そしてステージリスナーに追加されますか? 後者はクリック ハンドラに登録されていません - 間違いですか?

また、イベントを登録するときに次を使用することもできます(弱いリスナー)

addEventListener(イベントタイプ, ハンドラー, useCapture, 優先度, true );

例えば

addEventListener(MouseEvent.CLICK, onClicked, false, 0, true);

よろしくお願いします

于 2012-09-12T10:30:10.823 に答える