Android アプリケーションを作成し、メモリ リークを回避しようとしました。そのために、Eclipse Memory Analyzer を使用しました。問題の容疑者が 3 人います。いずれもサイズの大きなBitmapオブジェクト程度です(2つは8.8MB、1つは5.8MB)。私は自分のコードでいくつかのトリックを行いましたが、それらがこれを引き起こしたかどうかはわかりません:
- いくつかのビューの OnClickListener としてアクティビティを設定しました。
- getApplicationContext() を Context として使用して、ランタイム カスタム ビューを作成しました。
- アクティビティ クラス内でビューを保持するためのフィールドを宣言しました。
これの1つがメモリリークを引き起こす可能性がありますか? それとも、8.8MB のビットマップを持つのが普通でしょうか?
詳細に入ると、たとえば最初のビットマップが次のように保持されていることがわかりました。
byte[9216000] @ 0x42dda5b0 ..&...$...#...%...(...*...$... .........................z...t...t...y.........#...+...,...-...........(... .......$...*...&...%...%...&...'...'...#...........!...%...'...!... ..."...'...)...(...!.......!...*...-...,...+...'...$...&...&...$...........!...&....
9,216,016 9,216,016
\mBuffer android.graphics.Bitmap @ 0x418f9028
.+mBitmap android.graphics.drawable.BitmapDrawable @ 0x420211b8
.|\mBGDrawable android.widget.LinearLayout @ 0x41fb5528
.|.\[0] android.view.View[12] @ 0x41fcbf60
.|..\mChildren android.widget.FrameLayout @ 0x41fb4c90
.|...\mContentParent com.android.internal.policy.impl.PhoneWindow @ 0x4220f480
.|....+this$0 com.android.internal.policy.impl.PhoneWindow$DecorView @ 0x41fd8bd0
.|....|+mView android.view.ViewRootImpl @ 0x4220f5c0
.|....||+this$0 android.view.ViewRootImpl$2 @ 0x42032ed8 Native Stack
.|....||+this$0 android.view.ViewRootImpl$AccessibilityInteractionConnectionManager @ 0x420330f0 »
.|....||\Total: 2 entries
.|....|+[1] android.view.View[5] @ 0x41932f18 »