画像(大小)を多用したAndroidアプリを開発中です。ホーム画面には画像の「コラージュ」があります。通常のメカニズムを介して一連の「メモリリーク」をデバッグしました...しかしsetContentView
、メインでの呼び出しがActivity
非常に大きなメモリ割り当てを引き起こしていることに気付きました:
08-14 15:27:30.688: D/BEFORE setContentView PJK 6 CollageActivity(21845): debug.memory: 割り当て済み: 192.00MB の 49.05MB (19.22MB 空き) 08-14
15:27:31.049: D/AFTER setContentView PJK 7 CollageActivity(21845): debug.memory: 割り当て済み: 192.00MB 中 64.68MB (15.22MB 空き)
(これは Nexus 4 デバイスから取得したものです)。
上記の SO の質問で私たちが試していない唯一のことは、異なるスケールの背景画像を生成することです。これは、3,932,160 (= 1280 x 768 x 4) バイトの割り当てしか占めません。
DDMS (および MAT) は、ビットマップへの割り当てが大きいことを示しています。
レイアウトのどの部分がこのような大きな割り当て (16,384,064 バイト!) を引き起こしているかを特定する方法はありますか? (画像をそのサイズに再スケーリングしただけですが、役に立ちませんでした。)
編集
もう少し深く掘り下げて、android:background
drawable を から削除しましたLinearLayout
。
<LinearLayout
android:id="@+id/collage_activity_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/bg_collage"
android:orientation="horizontal" >
そして、離れているときのメモリ割り当て!800 x 1280 の背景 (800 x 1280 x 4 = 4,096,000 バイトの画像を生成する必要があります) が実際に 16MB の画像を生成する理由について何か考えはありますか? 800(画像サイズ)と768(画面サイズ)の違いのせいでしょうか?