2012-03-11 13 views
53

私のアプリがあまりにも多くのメモリを使用している理由を理解しようとしています。私はしばしば15から18MBの間でそれを見ます。これは私が予想していたよりもかなり高いです。私はDDMS経由でヒープサイズを見ていたし、これを見た:私のアプリがすべてで大きな画像を扱っていないので、suspicous少しを見大きなヒープサイズの原因を見つけて修復する

enter image description here

。実際、私のアプリのドロアブルの合計は約250KBです。だから私はヒープ・ダンプを作成し、MATを使ってこのすべてのメモリがどこに向かうのかを特定しました。バイトは[]の配列は、これまでの最大の消費者がいたので、私は、次のドリルダウンと気づい:

enter image description here

sPreloadedDrawablesは、このような高い保持ヒープサイズに責任があるなぜ私は絶対にないアイデアを持っていません。私は根本的な原因を特定する方法、またはそれを「修正する」方法を知らない。

どこから行くべきですか?私のアプリは、画像データをまったく扱わないサービスを介してバックグラウンドで動作します。私は、ユーザーが使用することを選択できるアクティビティを持っていますが、再び、そのような大きなヒープサイズを説明しない小さなドロアブルを使用します。私はまた、アクティビティリークなどの厄介な発生をチェックしましたが、何も見つけられませんでした。

EDIT:エミュレータで実行するとヒープサイズが大幅に低くなっていることに気付きました。これはかなり混乱しています。 :/

+1

携帯電話はどのAndroidバージョンで動作していますか?私は、ICSがイメージドロアブルをプリロードしていることに気付きました。私は、よりスムーズなUI体験を試し、VMメモリの増加を利用すると思います。あなたの携帯電話がICSにあり、エミュレータが2.Xであれば、その違いを説明できます。私は個人的に4.Xを実行しているエミュレータを調べて、膨らんだメモリが存在するかどうかを確認していません(後で私が何かすると思います)。間違いなく、4.0.3を実行している私の電話機にあります。 – sciutand

+0

私の携帯電話はエミュレータと同じようにAndroid 4.0.3を実行しています。 – Glitch

+0

エミュレータとデバイスの画面密度/サイズはどのくらいですか? – cistearns

答えて

44

システムは、デフォルトのシステムリソースをプリロードします。これは、チェックボックスやラジオボタンのための標準Drawablesのような、あなたのアプリケーションリソースとは無関係です。 10.5MBは大きく見えますが、多くのデフォルトシステムリソースがあり、メモリに一度格納されるとイメージは大きくなります。プリロードは新しいものではありませんが、プリロードのサイズはICSで大きくなる可能性があります。ディスプレイの密度はおそらくICSにプリロードされているシステムのDrawableを追加するだけで、この部分に影響を与えます。

で開催されたメモリを削減する方法は現在ありませんsPreloadedDrawables

アプリのプロセスがないアプリケーション(特にゲーム)のために起動された後、これをクリアする方法がないことを残念ですほとんどのシステムのDrawableを使用します。この場合、プリロードリソースのサイズが大きいのは、ICSの特定のリリース(またはハンドセットポート)のバグだったようです。そうでなければ、通常は少量のメモリなので、プリロードメモリの使用を減らすために、このようなメカニズムが必要になることは疑いの余地があります。

このキャッシュの結果としてメモリが不足している場合は、おそらくGoogleにバグレポートを提出します。

さらに詳細な内部情報が必要な場合は、ここでリソース事前ロード処理をトレースできます。 ZygoteInit.preloadResources

+4

うん。これをオフにする機能はありません。これは接合子プロセスで実行されます。これは一度作成され、すべてのアプリケーションプロセスが生成されます。したがって、ロードするリソースはすべてのプロセスで共有されます。 – hackbod

+0

ありがとうcistearns。私の主な問題は、ユーザーにこのメモリ使用量を見て報告することです。私の星評価に影響しています。私の携帯電話はiPhone 4と同じディスプレイを使用しているので、非常に高密度です(320dpiのようなもの)。在庫しているICSでは、Androidから報告されているように、20MB以上使用します。興味深いことに、後のビルドに更新した後、これは約7MBに低下しました。だから私は、これも悪いストックICSポートの製品かもしれないのだろうか? – Glitch

+1

あらかじめ予期していたよりも多くの(またはそれ以上の)アイテムが読み込まれるバグがありました。 @hackbod私はそれがspawner(非常にクール)として使用されていることを確認するために、集団を完全に掘り下げなかったので、プリロードがいつも起こる必要があるのがわかります。フォーク後にプリロードリソースをクリアするサポートを追加することは可能です。しかし、大きなサイズはバグだったようで、それは普通は小さいですが、これはいつまでも必要なことではないでしょうか。 – cistearns

関連する問題