在我的应用程序中,我有一个带有两个孩子的 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,这导致了草率的用户体验(注意 GC 时间和持续时间!)。我没有在应用程序的任何地方明确调用 System.gc。
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)上做同样的事情,所以在一部手机上总共没有 GC 调用,在另外两部手机上会发生这种情况。而且,OK 手机的功能远没有 Galaxy S2 强大,并且由于动画期间没有 GC 调用,仍然显示平滑的淡入淡出。有什么建议么?感谢帮助。
这绝对不是内存不足造成的,在 Galaxy S2 上,在此过程中使用了 64MB 堆中的 5MB。它似乎与实际的堆使用无关,每次都会发生。