1

数か月前に Google Play でアプリを公開しましたが、ほとんどのユーザーがアプリのメモリ使用量に大きな問題を抱えています。それは本当でした。「実行中のアプリケーション」タブからメモリ使用量を確認したところ、下の図のように、 80〜110MBのメモリが必要です。

ここに画像の説明を入力

この問題の原因となっているクラス/アクティビティまたはコードの一部を見つけるには、MAT (メモリ分析ツール) プラグインが便利であることがわかりましたが、本当に混乱します。次の画像を考慮してください。

ここに画像の説明を入力

使用メモリの合計サイズは9.8MBですが、[実行中のアプリケーション] タブには同時に80MBが表示されます。

もう 1 つの問題はヒストグラムです。オブジェクトの浅いヒープが高すぎます。byte[]

それは正常ですか?また、Google プロジェクトをデバッグすると、バイト値が常に高すぎます。

ここに画像の説明を入力

では、このすべてのメモリを使用しているものを見つけるにはどうすればよいでしょうか?

4

2 に答える 2

2

Android アプリケーションが起動すると、によって割り当てられたオブジェクトを継承します。これはZygote、アプリケーションのスポーンを高速化するためのトリックです。そのため、メモリ ダンプを取得すると、それらは自分のものとして表示されます。

Zygote がこれほど多くのメモリ割り当てを行う理由に対する答えは、resource読み込みを高速化するためのもう 1 つのトリックです。Android の起動時に、Zygoteクラスとリソースのリストをプリロードするため、他のすべてのアプリケーションが毎回それらをロードする必要はありません。

このプリロードの実装については、 ZygoteInit.java #330 を参照してください。

バイト配列が頻繁に使用されるのは、このプリロードされたリソース (ビットマップ) が原因です。

決定的なリソースからの MAT / バイト配列の使用状況分析のより具体的な例については、この回答を参照してください。

于 2013-09-18T09:02:39.430 に答える