なんてこった。したがって、これはメモリ管理スキームについて尋ねる質問ではありません。ご存じない方のために説明すると、Flash Virtual Machineは、参照カウントとマークアンドスイープを使用したガベージコレクションに依存しています(これらのトピックについて詳しくは、Grant Skinnerの記事とプレゼンテーションをご覧ください)。そして、はい、Flashは「削除」演算子も提供します。これは(残念ながらのみ)動的オブジェクトのプロパティを削除するために使用できます。
私が知りたいのは、Flashプログラムがバックグラウンドで実行しているときにCPUとメモリを消費し続けないようにする方法です(たとえば、コンテンツの読み込みやリモート通信を保存します)。この質問の動機は、iPhone OS 4の中心となるマルチタスク機能で予測されたように動作しないという理由でAppleがクロスコンパイルされたアプリケーション(SDK 4で)を禁止したことに一部起因しています。私の意図はFlashプログラムを作成することだけではありませんこれは、iPhone OS 4のマルチタスクに関しては「モチベーションを渡す」だけでなく、単にFlashプログラムをより良く(動作させる)ものにすることにもなります。
言い換えれば、FlashアプリケーションはiPhoneOS4のマルチタスク機能をどのように模倣するのでしょうか。Flash APIは、開発者が他のプログラムの実行中にアプリケーションを「スリープ」状態にしてから、同じようにすばやく「起動」する手段を提供しますか?
私たち自身のプログラムでは、ユーザーが(たとえば)4秒間アイドル状態(マウスの動きやキーの押下なし)になったことを検出するのと同じくらい大雑把なことをするかもしれません。
var idle_id:uint = setInterval(4000, pause_program);
var current_movie_clip:MovieClip;
var current_frame:uint;
...
// on Mouse move or key press...
clearInterval(idle_id);
idle_id = setInterval(4000, pause_program);
...
function pause_program():void
{
current_movie_clip = event.target as MovieClip;
current_frame = current_movie_clip.currentFrame;
MovieClip(root).gotoAndStop("program_pause_screen");
}
(プログラム一時停止画面上)
resume_button.addEventListener(MouseEvent.CLICK, resume_program);
function resume_program(event:MouseEvent)
{
current_movie_clip.gotoAndPlay(current_frame);
}
それが正しい考えである場合、アプリケーションが棚上げされるべきであることを検出するための最良の方法は何ですか?
そして、さらに重要なことに、Flash Playerは、実行中のプログラムの一部がアイドル状態であることを検出し、ユーザーがそれらを再開するアクションを実行するまで、同様にそれらを棚上げすることができますか?
(私が提起した多くの質問の多くまたは少ないものに自由に答えてください。)