私たちのプロジェクトでも同様の問題がありました。過去 10 秒間にビットマップが画面にレンダリングされていない場合、AIR はロードされたビットマップの圧縮されていない画像データを削除することがわかりました。ただし、ランタイムは圧縮された PNG または JPG データを保持するため、次にレンダリングする必要があるときに、必要に応じて画像を再圧縮解除できます。ただし、これにより、大きな画像を解凍する必要がある場合に、アプリでかなりの遅延が発生します。
私たちの修正には、ステージから画像 (後ですばやく表示する必要があるもの) を削除しないことが含まれます。画像を削除する場合は、代わりにステージの上部でアルファ 0.001 に設定します。画面には表示されませんが、Flash はレンダリングする必要があります。この修正は、レンダリング パフォーマンスに悪影響を及ぼすように聞こえますが、実際には、ステージ上にぶら下がっている「ほぼ透明な」ビットマップとの違いに気付きませんでした。
この修正にもかかわらず、いくつかの問題が発生する可能性があります。画面に何も変化がない場合、ランタイムはレンダー パスを実行することさえしません。長時間 (約 10 秒間) 何もレンダリングされない場合、Flash は不要なビットマップがステージ上に表示されている場合でも、それらを破棄し始めます。別の手法を使用して、Flash にレンダリングを強制的に継続させました。
- アルファを 0.001 に設定して小さな長方形を作成します。ステージの最上層に追加します。
- 1 秒の遅延で永遠に繰り返すタイマーを作成します。
- タイマーがトリガーされるたびに、長方形をステージ上のランダムな位置に移動します。
これにより、少なくとも 1 秒に 1 回、Flash がレンダー パスを実行するようになります。
注: ビットマップ サイズの制限は、AIR 3 (および Flash Player 11) で完全に削除されました。したがって、今日、イメージが RAM に収まる場合は、ロードできます。