2012-03-28 4 views
0

私の質問を見て時間を割いていただきありがとうございます。私は現在、開発中のアプリケーションでメモリスパイクに問題があります。Androidメモリスパイク

大量のHTMLデータをダウンロードして処理できるようにすることが目的ですが、原因は現在のところ、HTMLでネストされた大きなbase64エンコードされたイメージがモバイルプラットフォームでの使用には適していないためです。記録のために、私は現在、サムスン銀河Sでテスト中です。また、ではなく、がギャラクシーネクサスで発生します。

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

このエラーが発生した場合、通常、HttpGetを使用してHTMLをダウンロードするか、StringBufferを使用してディスクからデータを抽出しています。場合によっては、XMLの膨張中にBitmapによって引き起こされることがあります。

ご協力いただければ幸いです。

+0

ギャラクシーSには2.3の走行距離があります。だからあなたはジンジャーブレッドとICSを比較します。可能であれば、あなたの解析後にクリーンアップを試みるべきです... – WarrenFaith

+0

返信ありがとうございます。銀河系Sは2.3.6です。私は可能な限りクリーンアップしていますが、割り振られたメモリが18MBを超えることはありませんが、まだヒープを拡張しようとしているのは不思議です... –

+0

ガベージコレクションと失敗したファイナルで生成されたLogCat出力を投稿してください割り当て。 –

答えて

0

実際にその量のメモリが必要な場合は、ほとんどできません。電話機はメモリが限られています。

メモリの譲渡は即時ではありません。すべてのメモリを解放するには数回反復する必要があります(各繰り返しは数秒間隔で実行される可能性があります)。

イメージ/ドロワーブルで使用するメモリが多すぎると問題が頻繁に発生します。時にはそれはメモリリークです。それ以外の時に何が起こっているのかを言うことはできません。

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

+0

返信ありがとうございましたPedro、私は後でサードパーティライブラリを探します。私は現在、JSONデータからHTMLを解析していますが、大きなデータチャンクのためにメモリをスパイクすることはできません。 –

0

ベストプラクティスは、大量のメモリを割り当てることではありません。データをネットワークから読み込んだり、ストリームをディスクにストリームしたり、そこから読み取ったりして、ストリーム内のデータを処理します。 android:largeHeapオプションは、Android 3.0以上を搭載しているすべての端末で使用できますが、割り当て可能な容量が増えても、制限を完全に削除することはできません。

関連する問題