とりあえず覚え書き+情報共有+誰か助けて的な話
要はGoogleI/O2009でも紹介された(?)、Viewの再利用とThread処理を利用した、画像のサムネイルギャラリー画面を作ってみたわけですが。
※ ソースは下の内容とほぼ同じ、唯一違うところは、画像の読み込みをAsyncTaskじゃなくてThreadで実行
http://labs.techfirm.co.jp/android/cho/2161
OS2.3までは何の問題もなく動作するのに対し、何故かICS4.0以降になると、初回のheapの使用量が数十倍レベルで変わる上に、GridViewをスクロールすればするほどheapの使用量が増大し続けて、みんな大好きMemoryOfErrorが発生。ちなみにGalaxyNexusでこの現象を確認。
おそらく読み込んだBitmapを保持し続けてしまっているのが原因ではないかと踏むも、解決策までは見つからず。ちなみにAsyncTaskで読み込む形にしても同様のエラーが発生。
ちなみにICSだと、これまででは見られなかったdalvikvmからのログも吐かれるようになった。
気になるログ
04-06 14:35:37.567: I/dalvikvm-heap(3798): Grow heap (frag case) to 14.344MB for 352656-byte allocation
04-06 14:35:13.012: I/dalvikvm-heap(3338): Clamp target GC heap from 64.503MB to 64.000MB
04-06 14:35:14.708: I/dalvikvm-heap(3338): Clamp target GC heap from 64.686MB to 64.000MB
04-06 14:35:14.708: I/dalvikvm-heap(3338): Forcing collection of SoftReferences for 1555216-byte allocation
04-06 14:35:14.747: I/dalvikvm-heap(3338): Clamp target GC heap from 64.684MB to 64.000MB
04-06 14:35:14.747: E/dalvikvm-heap(3338): Out of memory on a 1555216-byte allocation.
04-06 14:35:14.747: I/dalvikvm(3338): "main" prio=5 tid=1 RUNNABLE
04-06 14:35:14.747: I/dalvikvm(3338): | group="main" sCount=0 dsCount=0 obj=0x40a66460 self=0x12828
04-06 14:35:14.747: I/dalvikvm(3338): | sysTid=3338 nice=0 sched=0/0 cgrp=default handle=1074893960
04-06 14:35:14.747: I/dalvikvm(3338): | schedstat=( 0 0 0 ) utm=975 stm=120 core=1
原因と解決策はいまだ模索中。