5

在我的应用程序中,我有一个带有两个孩子的 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。它似乎与实际的堆使用无关,每次都会发生。

4

0 回答 0