1

私は動画を扱っているアプリを書いています。私たちが知っているように、ビデオ処理はHD解像度を扱う際に膨大なメモリを必要とします。私のアプリケーションはいつもクラッシュしていたようだ。しかし、実際には私は100%確信している、私のコードではメモリリークがないです。インストゥルメンツは漏れがないことを示しているiOSでバックグラウンドアプリの強制終了が可能ですか?

最初はOpenGLESビューとビデオエンジンを起動しています。非常に短い時間の間、メモリ消費は高くなりますが、初期化が完了した後は通常のレベルに落ちます。私はこの期間中常にメモリの警告を受けています。通常これは問題ありません。しかし、サスペンドモードでたくさんのアプリを実行していると、アプリがクラッシュするようです。クラッシュログを見て、デバッガを使用すると、メモリが不足しているだけです。

私の顧客は、「app is crashing」というメールを私のサポートメールに氾濫させています。しかし、私は知っている、彼らはあまりにも多くのアプリをバックグラウンドで実行しているので、メモリは残っていません。私はそれは、アプリを実行する前にバックグラウンドタスクを終了しなければならないと顧客に言っていることをプログラミングする悪いスタイルだと思う。

this postによると、これは一般的な問題です。

私の質問は次のとおりです。オペレーティングシステムにいくつかの中断されたアプリケーションを終了させるために、多くのメモリが必要だとOSに伝えることはできますか?この記憶のものは私を狂ってしまいます。なぜなら、私が修正できるバグではないからです。

答えて

1

いいえAPI呼び出しなしでサンドボックスの外には何も影響を与えることはできません。パブリックAPIの他のプロセスに影響を与えるものはありません。

メモリ使用量を最小限に抑えようとしましたか?私の経験では、一度メモリを警告すると、メモリ使用量が低下しても、バックグラウンドにいればアプリを投げることができます。

OpenGLESとテクスチャを使用している場合、まだテクスチャをcompressしていない場合。メモリ割り当てスパイクの具体的な原因は何ですか?

+0

私はビデオフレームにいくつかのフィルタを適用するためにcoreImageを使用しています。 CoreImageはイメージをGLES CoreImageコンテキストにレンダリングします。私は単にGLKit viewControllerを作成しています。魔法はありません。 OpenGLとAVFoundationはスパイクを生成する何かを初期化しています。メモリ警告(約2MB)ではなく、メモリが非常に高速に上昇するので、メモリ警告については不思議です。私は回避策を試みました。 AVFoundation側では、NSLockを使用してOpenGLが作成されるのを待っています。メモリ警告は消えてしまいました。私は時間当たりのメモリ使用量がこの厄介なメモリ警告を担当すると仮定します。 – JackPearse

+0

Googleを使用してこのソースを見つけました:http://codethink.no-ip.org/wordpress/archives/455このリンクは、メモリ警告サブシステムをバイパスする方法を示しています。そして - 驚き - もうアプリの終了はありません。 「ハード」メモリ警告のみが終了につながります。これはエレガントではありませんが、機能します。 – JackPearse