在动画期间,android 2.3.5上过多的不需要的系统调用GC

Hox*_*Hox 5 animation android garbage-collection

在我的应用程序中,我有一个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>  
Run Code Online (Sandbox Code Playgroud)

然后我正在切换图库图像(每张图片大约800x600):

//(setup wanted images into ImageViews)
//then:
viewFlipper.setInAnimation(instance, R.anim.fade_in);
viewFlipper.setOutAnimation(instance, R.anim.fade_in);
viewFlipper.setDisplayedChild(nextIndex);
Run Code Online (Sandbox Code Playgroud)

在Android 2.3.4上,一切都按预期进行,但在2.3.5手机(Galaxy S2)上,dalvik在动画期间调用了几次GC,这导致了糟糕的用户体验(注意GC时间和持续时间!).我没有明确地在app中调用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
Run Code Online (Sandbox Code Playgroud)

它也在另一个2.2+手机(不是一个星系s2)上做同样的事情,所以总共在一部手机上没有GC呼叫,另外两个则发生这种情况.而且,OK手机的功能远不如Galaxy S2,并且由于在动画过程中缺少GC调用,仍然可以显示平滑的淡入淡出.有什么建议?感谢帮助.

它绝对不是由内存不足引起的,在此过程中Galaxy S2 5MB用于64MB堆.它似乎与实际的堆使用无关,它每次都会发生.