私たちのアプリのメモリ使用量を分析していて、Drawables
数メガバイトのヒープを常に「食べる」奇妙な を発見しました。以下は、MATのスクリーンショットです。
2 つのかなり大きなビットマップを持つドミネーター ツリー
上記のビットマップのいずれかの GC ルートへのパス
このビットマップは、アプリの使用時間や集中度に関係なく、携帯電話 ( Samsung Galaxy Nexus、OS 4.1.1 )のヒープ ダンプに常に表示されます。
私はすでに MAT を使用してこのビットマップのソースを検索しようとしましたが、うまくいきませんでした。私が見つけることができたすべての有用な情報は、ビットマップでwidth
ありheight
、両方とも512x512です。
しかし、私たちのアプリには 512x512 のドローアブルが 1 つもありません。これは「システム」のドローアブルだと思います。しかし、正確には何ですか?なぜそんなに大きいのですか?
android.content.res.Resources
クラスのソースコードも調べて、sPreloadedDrawables
フィールドの使用法を検索しましたが、運もありませんでした。メモリ ダンプから得られるのはkey
配列sPreloadedDrawables
だけですが、このキーからファイル名またはリソース ID を特定できません。
だから、私の質問は次のとおりです。
このビットマップの名前または ID を特定するにはどうすればよいですか?
この巨大なビットマップがロードされる理由と、それらが常にメモリにとどまる理由は何ですか?
更新:
メモリ ダンプからこのビットマップを調べる方法を見つけました。この 2 つのビットマップは単純なグラデーションで、1 つは黒、もう 1 つは白です。これはHolo.Light
およびHolo.Dark
ICS テーマのリソースだと思います。しかし、私の 2 番目の質問はまだ現実的です: なぜこのビットマップは常にメモリに残るのでしょうか? それらをアップロードまたはリサイクルする方法はありますか?