2012-11-13 32 views
2

我剛剛在Galaxy Nexus上的Android 4.2上進行了升級,而且ListView似乎比以前慢了4.1。這個bindView方法在4.1上是完美的,在新的4.2上我看到小毛刺。我試圖明確啓用AndroidManifest.xml的硬件加速,但它沒有多大幫助。 People(Contacts)應用程序在4.2上完美運行,我猜也是通過擴展android.support.v4.widget.CursorAdapter來實現的。我也已經試圖改變android.support.v4.widget.CursorAdapterandroid.widget.CursorAdapter沒有明顯的改善。ListView在4.2上的性能低於4.1

@Override 
public void bindView(View view, Context context, Cursor cursor) { 
    final ViewHolder holder = (ViewHolder) view.getTag(); 
    holder.nameView.setText(cursor.getString(mStreetColumnIndex)); 
    holder.townView.setText(cursor.getString(mTownColumnIndex)); 
    if (mDistanceColumn != null) { 
     float distance = cursor.getFloat(mDistanceColumn); 
     String distanceUnit; 
     if (distance >= 1000) { 
      distance /= 1000; 
      distanceUnit = " km"; 
     } else { 
      distanceUnit = " m"; 
     } 
     String decimalString = mDecimalFormat.format(distance); 
     holder.distanceView.setText(decimalString + distanceUnit); 
     holder.distanceView.setVisibility(View.VISIBLE); 
    } else { 
     holder.distanceView.setVisibility(View.GONE); 
    } 

    // read only brand first letter to be faster 
    cursor.copyStringToBuffer(mBrandColumnIndex, mBuffer); 
    if (mBuffer.sizeCopied > 0) { 
     if (mBuffer.data[0] == 'a') { 
      holder.logoImgView.setImageResource(R.drawable.agip); 
     } else { 
      holder.logoImgView.setImageResource(R.drawable.papoil); 
     } 
    } else { 
     holder.logoImgView.setVisibility(View.INVISIBLE); 
    } 
} 

編輯:添加的行佈局

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:minHeight="@dimen/row_height" 
      android:background="@drawable/bg_list_selector" 
      android:layout_marginRight="@dimen/screen_padding" 
      android:layout_marginLeft="@dimen/screen_padding" 
      android:paddingLeft="@dimen/screen_padding"> 
<LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerVertical="true" 
     android:layout_alignParentLeft="true" 
     android:layout_marginRight="@dimen/screen_padding" 
     android:layout_toLeftOf="@+id/txtDistance" 
     android:orientation="vertical" 
     > 
    <TextView 
      android:id="@+id/txtName" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textSize="@dimen/list_text_primary_size" 
      android:textStyle="bold" 
      /> 
    <TextView 
      android:id="@+id/txtTown" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textSize="@dimen/list_text_primary_size" 
      /> 
</LinearLayout> 
<TextView 
     android:id="@+id/txtDistance" 
     android:layout_toLeftOf="@+id/imgLogo" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerVertical="true" 
     android:textColor="@color/grey_dark" 
     android:textSize="13sp" 
     android:textStyle="bold" 
     android:layout_marginRight="@dimen/screen_padding"/> 
<ImageView 
     android:id="@+id/imgLogo" 
     android:layout_alignParentRight="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/agip" 
     android:background="@color/grey_dark" 
     /> 
</RelativeLayout> 

編輯2: 這裏是traceview http://goo.gl/UmS3w 其用http://goo.gl/Yoe1u

+0

你的行佈局如何? – auselen

+0

我已添加行佈局。 – sealskej

+0

你的textviews下有一行嗎? – BigBen3216

回答

1

它是由太複雜windowBackground造成發,這是:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:drawable="@drawable/bg_repeat"> 
</item> 
<item> 
    <shape> 
     <gradient android:startColor="#0affffff" android:endColor="#0a000000" 
        android:type="radial" android:gradientRadius="500"/> 
    </shape> 
</item> 
<item> 
    <shape> 
     <gradient android:startColor="#1effffff" android:endColor="#1e000000" 
        android:type="linear" android:angle="270"/> 
    </shape> 
</item> 
</layer-list> 

和bg_repeat.xml:

<?xml version="1.0" encoding="utf-8"?> 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/bg" 
    android:tileMode="repeat"/> 

謝謝大家的幫助!