2012-04-12 13 views
1

私たちは現在、Air for iOSを使用してiPadアプリケーションを開発していますが、アプリケーションがあまりにも多くのメモリを使い果たしているように見えることがあります(iPad1のiOS 5のみ)。iOS用のAir - 制限されたメモリのためにクラッシュを処理する方法は?

アプリケーションでこのようなエラーを捕捉/処理する方法はありますか?メモリが不足しているときの通知方法flash.errorsをキャッチしようとしています.MemoryErrorは動作していません。任意のヒント?

答えて

5

私はこの分野でいくつかの仕事をしています。私はあなたに与えることができるヒントをいくつか紹介します。

  1. Flash Builderの4.6 プレミアムを取得します。

    プロファイラーだけの場合はそれを入手してください。このようなことを診断するのに最適なプロファイラーの1つがあります。そう言えば、さまざまな程度の有用性を持つ他のFlashプロファイラがあります。

    これだけで、メモリの大部分が未処理のメモリ使用量のどこにあるかを見つけて診断するのに役立ちますが、ガベージコレクタの前に作成したり破棄しているオブジェクトの数、ついに彼らを去らせるようになっています。むしろconstantaly小さなオブジェクトを作成し、destoryingより

  2. プール小さく些細なオブジェクト

    object poolsを作成します。これにより、新しいオブジェクトを常に回転させるコストを節約し、ガベージコレクタがメモリを解放する前に実行するまで待つ必要がなくなります。

    actionscriptでオブジェクトプールを作成するためのサンプルとパターンがたくさんあります。 ASがジェネリックをサポートしていればそれは簡単ですが、まだそれがなくてもかなり簡単です。

  3. 熱心に巨大なオブジェクトの

    を配置これは、前のポイントでアドバイスに対して直接行くが、巨大なオブジェクトのために、あなたは彼らは永遠に記憶にぶらぶらしたくありません。私はBitmapDataのようなものを参照しています。(近い将来に)完了したら、それらを破棄してヌルにして、ガベージコレクタでそれをきれいにしましょう。

    もう一度必要なときに再構築してください。はい、パフォーマンスはわずかですが、モバイルデバイスのメモリは貴重であり、読み込み画面にしか現れない2MBのビットマップデータオブジェクトを保持することで無駄になりません。それを捨てる。あなたには、いくつかの時間を取り、実際にガベージコレクタがその作業を行う必要があり、どのようにその缶をオブジェクトと捨てることができないかを決めるかを理解しようとするもう

    を必要としない

  4. ヌルうちの参照。 CGは通常それを理解することができますが、自己参照オブジェクト/循環参照を避けるようにしてください。時には手書きの保持が必要な場合もあります。

  5. は、あなたが再びこのステップのために役立ちますが、毎回、新しいオブジェクトをインスタンス化することを確認しますメモリプロファイラを使用してnew

    [2に関連する]を使用するたびに評価し、あなたはインスタンス化する必要があります新しいオブジェクト。 PC用に開発するときに怠け者になったり、新しいオブジェクトをプールに投げ込んだり、CGがそれを整理したりするのはとても簡単です。小さい場合は、良いキャッシング戦略(オブジェクトプーリング、または単に参照キャッシング)があるかどうかを確認してください。あなたが構築している巨大なオブジェクトがしばしば壊れている場合は、より良いアーキテクチャーなソリューションを考え出すべき時が来ます。

私が知る限り、iOSがメモリが低いと思う点に到達した場合は、すでに遅すぎます。前回チェックしたとき、フレームワークはメモリ不足と思ったときにCGを実行しようとしますが、それでも十分なメモリを解放して続けることができない場合、失敗します。オペレーティングシステムがあなたのスレッドを終了することだけが安全な選択肢であると思うようになるのを避けようと努力してください。

+0

ちょっとそこに - これらはすべて、それらのおかげで、より少ないメモリを使用する方法の非常に良いヒントになるようです。しかし、メモリが不足しているときに通知する方法はありますか?私はiOSが残っているメモリが少ないときにアプリケーションに通知すると思います - AS3にその情報を取得する方法はありますか?あるいは、失敗した「新しい」ものを捕まえる方法はありますか? – Mat

+0

@Mat [System.freeMemory](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/System.html#freeMemory)を参考にしてください。あなたが好きなら手動でしかし、実際にOSがそれを心配してからではなく、問題が発生する前にメモリ使用量を管理しようとしているはずです。 - もしあなたが記憶の不足のために '新しい'が失敗するところにいたら、それについて何かするのが遅すぎるのです。 –

+2

本当に - iOSのコーディング時に、メモリを解放して、少なくとも(たとえば、アプリをクラッシュさせる代わりに)エラーメッセージを表示することができます。 System.freeMemoryは役に立つとは思われません。なぜなら、アプリが現在使用しているメモリの量とは無関係に、常に非常に小さな数であるからです。また、クラッシュは他の多くのアプリケーションがバックグラウンドで実行されているかどうかによって異なります。もちろん、メモリ消費量を低く抑えることは良いことですが、アプリがクラッシュする理由を知るための方法を少なくとも持っている方が良いでしょう(少なくとも、ログファイルやこれに何かを書き留めておいてください) – Mat

関連する問題