0

Android の Flash ベースのビデオ プレーヤーが、数時間再生すると必ずクラッシュするのはなぜですか?

私はフラッシュベースの Android アプリを書いています。ネイティブ Android パーツが webview を使用してフラッシュ SWF をロードする唯一のこと。swf は、すべてのモジュール (すべてフラッシュ as3 で記述) のコンテナーとして機能しました。モジュールの 1 つは、一連のビデオ プレイリストを永久にループ再生する単純なビデオ モジュールです。

私はメモリ リークを考えましたが、(フラッシュの System.totalMemory を使用して) メモリ使用量を出力した後、結果は常に約 12MB から 14MB です (2 つのビデオでは通常のようです)。webview と他のサードパーティの Android 用 SWF プレーヤー (「Swf Player」や「Smart SWF Player」など) の両方を使用してフラッシュをテストしましたが、すべて数時間後にクラッシュします。

as3 コードはシンプルで、考えられる原因がわかりません。これが私のメインクラスです:

import flash.display.MovieClip;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream; 
import flash.events.NetStatusEvent;

public class simpleVid extends MovieClip {      
    private var video:Video;
    private var nc:NetConnection;
    private var ns:NetStream;
    private var uri:Array = new Array("vid1.flv", "vid2.flv");
    private var counter:int = 0;

    public function simpleVid() {
        // constructor code
        nc = new NetConnection();
        nc.connect(null);
        ns = new NetStream(nc);
        video = new Video();
        video.attachNetStream(ns);

        ns.client = {onMetaData:videoReady, NetStatusEvent:onStatusEvent};
        ns.addEventListener(NetStatusEvent.NET_STATUS, onStatusEvent);

        ns.play(uri[counter]);
        stage.addChild(video);

        counter++;
        counter = counter % 2;
    }

    public function videoReady(item:Object){
        video.width = 1280;
        video.height = 720;
    }

    public function onStatusEvent(event:NetStatusEvent):void{
        if (event.info.code == "NetStream.Play.Stop") {
            ns.play(uri[counter]);
            counter++;
            counter = counter % 2;
        }
    }
}

このコードで見逃したことや間違ったことはありますか?

前もって感謝します。

4

1 に答える 1

0

フラッシュの代わりにAIRに切り替えた後、問題は「不思議なことに」消えました。コードは変更せず、リリース設定を Flash Player から Android の air に変更しただけです。現在、問題なく数日間連続して実行できます。

于 2013-07-22T03:06:29.780 に答える