1

なんてこった。したがって、これはメモリ管理スキームについて尋ねる質問ではありません。ご存じない方のために説明すると、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は、実行中のプログラムの一部がアイドル状態であることを検出し、ユーザーがそれらを再開するアクションを実行するまで、同様にそれらを棚上げすることができますか?

(私が提起した多くの質問の多くまたは少ないものに自由に答えてください。)

4

2 に答える 2

1

さて、私はすぐにiphoneosのフラッシュのためにあなたの息を止めません。

http://www.engadget.com/2010/04/21/adobe-halts-investment-in-iphone-specific-flash-dev-tools-has-a/

于 2010-04-21T17:43:17.053 に答える
1

基本的に、アプリがフォーカスを失ったときを使用Event.ACTIVATEして確認できます。Event.DEACTIVATE

それ以外は、Flash IDEを純粋なアニメーション以外には使用せず、プログラミング中心のActionScriptIDEを使用することをお勧めします。Flash IDEは、効率を目的として設計されているのではなく、使いやすさを目的として設計されています。適切に最適化するには、アプリの完全な制御を維持するためにプログラムで処理を行う必要があります。

iPhoneに関しては、それはあなたが気にするべきことではありません。もしadobeがiPhoneでフラッシュを取得する方法を見つけたとしたら、それらの抽象化レイヤーはiPhoneOSで可能な限りうまく機能するように適応されると思います。ネイティブフラッシュプレーヤー実装の内部動作は、大規模なAPI更新、おそらく新しいオペコード、およびサンドボックス環境でのアクセスを許可されるべきではないレイヤーへの非常に直接的なアクセスを必要とするため、ほとんど確実に公開されません。フラッシュプレーヤーはです。

于 2010-04-21T10:16:41.390 に答える