2

任意の数のサードパーティ SWF ファイルを一度に 1 つずつ読み込んで表示できる AIR アプリケーションについて考えてみます。Web ブラウザのように。

問題は、これらの SWF ファイルに、削除されていない EventListeners などが含まれている可能性があることです。

Loader.unloadAndStop() でこれらの SWF をガベージ コレクションできますか?

そうでない場合は、アプローチがありますか (SWF ごとに新しい NativeWindow を作成し、完了したら NativeWindow を閉じます。完全に GC になりますか?)

4

3 に答える 3

2

個別のネイティブ ウィンドウまたはブラウザー コントロール内での読み込みは、制御できないサード パーティの SWF の方法になる可能性があります。そうしないと、これにより多くのオーバーヘッドが追加されます。

残念ながら、ロードされたコードの適切なサンドボックス化を保証することはできません (表示オブジェクト、最も重要なのは、ロードされたコードからステージを非表示にすることはできません)。ロードされたコードがステージにリスナーを追加した場合 (これは、キーボード イベントが必要な場合によく行われます)、アンロードされません。

ただし、これは、SWF 形式自体が異なるモバイル デバイスでは不可能です。

于 2012-07-30T11:41:12.063 に答える
0

しばらく前に、ソースを持たない外部で開発されたコンポーネントで同様の問題が発生し、それがアプリケーションに挟まれていました。私ができる/考えることができる最善のことは、原子力産業が行っていることをすることでした-物事が悪くなったとき、少なくともそれを具体的に封じ込めて、必要以上に広がらないようにします.

私の解決策は、汚染されたオブジェクトが「クリーン」であることが要求されたときに、必要に応じて再利用できるように別の保持エリアに配置されるように「コンポーネント プール」を構築することでした。セッション。

于 2012-07-31T15:28:48.780 に答える
-1

GC を実行する前に、ロードされた swf ファイル内のすべてのリスナーを削除する public static 関数を作成する必要があります。

于 2012-07-30T11:05:09.257 に答える