2011-07-26 6 views
4

多くのマップファイル(数ギガのデータと数千のファイル)をダウンロードするためのプロセスがあるiPadアプリがあります。私のiPadアプリでデバイスを再起動できますか?

最新のテストリリースでは、ダウンロード処理中にデバイスが再起動されることがあります(ダウンロードには数時間かかる場合があります)。

アプリが再起動すると、クラッシュレポートは残されません。 iPad 1と4.3.3を実行しているiPad 2の両方でこの現象が確認されています。

私が考えることができるのは、これらのダウンロードを実行すると最大同時スレッド数が4から20に増加したことだけです。

答えて

6

システムメモリを完全に使い切ると、デバイスがハードリブートされます。これは以前はiPhone OSやiPod touchの限られたハードウェアで動作していたiPhone OS 2.0でより一般的でした。最近のOSのバージョンでは、アップルはメモリの上限を超えたときにアプリケーションを強制的に強制的に強制するので、これを行うのがはるかに難しくなっています。また、デバイスは以前よりもはるかに多くのメモリを持っています。

ときどきこれを行うことができる1つの方法は、アプリケーションで使用されているメモリとしてすぐに識別されない大きなテクスチャやその他のグラフィックコンポーネントを読み込むことです。私はタイトなループでGPUにデータの山をロードするときにシステムを再起動させることができました。あなたはここで似たようなことに遭遇しているかもしれません。

これは、あなたが行っているアクティブなスレッドの数に関係しているのではないかと疑いますが、システムがアプリケーションを終了させる前にデータをメモリにダンプする方が簡単でしょう。

リソースを消費するスレッドがたくさんあるのではなく、GCDやASIHTTPRequestのようなキューベースのフレームワークを使用して見たことがありますか?これらはアプリケーションにとってより効率的ですが、必要な並行性を提供することができます。

+0

ありがとうBrad ...いつものように素晴らしい答え。私たちはASIHTTPを使用しています...この問題は、最大同時スレッド数を4以上に設定したときに上がり始めました.20時に多くのトリガーが発生し、10時にはほとんど発生しませんでした。 –

0

メモリ管理のおかげでアプリがクラッシュする可能性があります。数GBのデータをダウンロードしているので、ディスク容量が不足している可能性があります。私は再起動するためにあなたのデバイスが何時間かかかるとは思っていません。

いくつかのコードを投稿してください。

+1

OPは、ダウンロード処理に数時間かかる可能性があり、再起動しないことを意味していました。 – Coeffect

+0

それをもっと明確にする必要があります。すべてのデータを数ギガバイトダウンロードするには数時間かかることがあります。 – WrightsCS

0

Instrumentsでデバッグしましたか?これは、割り当てが増えていてメモリがいっぱいになっている場合に表示されます。これらのGBをメモリにロードしようとしている場合、もちろんクラッシュを経験することになります。

また、スレッドの代わりにdispatch_applyを見ましたか? GCDは、負荷に基づいて使用するスレッドを自動的に分散し、増減します。あなたはこれを自分で管理する必要はありません。それはショットの価値があるかもしれません。