0

画像(大小)を多用した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:backgrounddrawable を から削除しました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(画面サイズ)の違いのせいでしょうか?

4

2 に答える 2

2

これを修正するには、次の 2 つのことを行う必要がありました。

  1. 使用していた背景画像は JPG でした。画像を (両方の向きで) PNG に変更すると、使用量が 16MB から約 8MB に減少しました。

  2. また、画像は各方向に 25% ずつ縮小する必要がありました。これにより、向きの変更ごとの割り当てがはるかに管理しやすくなりました (約 2MB)。

于 2013-08-21T03:04:29.850 に答える