私のアプリでは、次のような 2 つの子を持つ ViewSwitcher があります。
<ViewFlipper
android:id="@+id/galeryviewflipper"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:id="@+id/galeryimageview_0"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitCenter"
/>
(... other stuff here)
</RelativeLayout>
<RelativeLayout>
(... copy previous except for IDs)
</RelativeLayout>
</ViewFlipper>
次に、ギャラリーの画像を切り替えています (それぞれが約 800x600 の写真です)。
//(setup wanted images into ImageViews)
//then:
viewFlipper.setInAnimation(instance, R.anim.fade_in);
viewFlipper.setOutAnimation(instance, R.anim.fade_in);
viewFlipper.setDisplayedChild(nextIndex);
Android 2.3.4 ではすべてが期待どおりに動作しますが、2.3.5 フォン (galaxy S2) では、アニメーション中に dalvik が GC を数回呼び出します。System.gc を app のどこにも明示的に呼び出しません。
05-18 21:06:56.040: D/dalvikvm(6617): GC_EXTERNAL_ALLOC freed <1K, 50% free 5447K/10695K, external 17083K/17815K, paused 30ms
05-18 21:06:56.115: D/dalvikvm(6617): GC_EXTERNAL_ALLOC freed <1K, 50% free 5447K/10695K, external 17083K/17815K, paused 30ms
05-18 21:06:56.175: D/dalvikvm(6617): GC_EXTERNAL_ALLOC freed <1K, 50% free 5447K/10695K, external 17083K/17815K, paused 31ms
05-18 21:06:56.245: D/dalvikvm(6617): GC_EXTERNAL_ALLOC freed <1K, 50% free 5447K/10695K, external 17083K/17815K, paused 30ms
05-18 21:06:56.305: D/dalvikvm(6617): GC_EXTERNAL_ALLOC freed <1K, 50% free 5447K/10695K, external 17083K/17815K, paused 31ms
05-18 21:06:56.365: D/dalvikvm(6617): GC_EXTERNAL_ALLOC freed <1K, 50% free 5447K/10695K, external 17083K/17815K, paused 30ms
05-18 21:06:56.415: D/dalvikvm(6617): GC_EXTERNAL_ALLOC freed <1K, 50% free 5447K/10695K, external 17083K/17815K, paused 32ms
また、別の 2.2 以降の電話 (Galaxy S2 ではない) でも同じことを行うため、合計で 1 つの電話では GC 呼び出しがなく、他の 2 つの電話ではこれが発生します。また、OK phone は Galaxy S2 よりもはるかに強力ではありませんが、アニメーション中に GC 呼び出しがないため、スムーズなフェードインとアウトが表示されます。助言がありますか?手伝ってくれてありがとう。
Galaxy S2 では、このプロセス中に 64MB ヒープのうち 5MB が使用されます。実際のヒープ使用量とは無関係のようで、毎回発生します。