0

まず、私の質問に目を通してくれてありがとう。現在、開発中のアプリケーションでメモリ スパイクの問題が発生しています。

私の意図は、大量の HTML データをダウンロードして処理できるようにすることです。現在の原因は、モバイル プラットフォームでの使用には理想的ではないことを理解している HTML にネストされた大きな base64 でエンコードされた画像にあります。記録のために、現在、Samsung Galaxy S でテストしています。また、この問題は、アプリケーションごとにより多くのメモリ割り当てがあるため、Galaxy Nexus では発生しません。

私の問題は、約 2.8 MB の大量の HTML データを処理しているときに、メモリ ヒープが約 27 ~ 29 MB に増加しますが、割り当てられたメモリが 18 ~ 19 MB を超えることはありません。HTML が処理され、保存され、表示されると、割り当てられたメモリは約 3 ~ 4 MB に戻ります。その後、この HTML を再度ダウンロードして処理すると、プロセスが繰り返され、同じメモリ使用量になりますが、ヒープがさらに増加するように見えますが (私には必要ないように思えます)、この時点でOut of memoryエラーが発生します。

このエラーが表示されるのは、通常、.html を使用して HTML をダウンロードしている間、HttpGetまたはStringBuffer. Bitmap場合によっては、XML インフレーション中に発生することがあります。

どんな助けでも大歓迎です。

4

2 に答える 2

0

その量のメモリが本当に必要な場合にできることはほとんどありません。電話のメモリは限られています。

メモリの割り当て解除は瞬時ではありません。すべてのメモリを解放するには、数回の反復が必要になる場合があります (各反復は数秒間隔で実行される場合があります)。

画像/ドローアブルで使用されるメモリが多すぎるという問題が頻繁に発生します。メモリリークの場合もあります。それ以外の場合は、何が原因であるかを言うことができません。

大きな xml ファイルの解析にも問題がありました。私の解決策は、これらのファイルを小さなファイルに分割することでした。もう 1 つの可能性は、さまざまな xml パーサーの長所と短所を検討することです (最初の Google の結果: SAX パーサー vs XML プル パーサー)。たぶん、メモリ使用量の問題で特別に開発されたサードパーティの実装を使用していますか? 3 つ目のオプションは、サーバーを使用して xml ファイルをより効率的な形式に変換することです。

于 2012-03-28T21:18:02.307 に答える
0

ベスト プラクティスは、大量のメモリを割り当てないことです。ネットワークからデータを読み取るときにデータをストリーム内で処理するか、ディスクにストリーミングしてからそこから読み取ります。android:largeHeap オプションは、Android 3.0 以降を実行しているすべてのデバイスで使用できますが、割り当て可能な量が増えるだけで、制限が完全になくなるわけではありません。

于 2012-04-04T21:42:00.473 に答える