2

Galaxy Nexus で Android 4.2 にアップグレードしたところ、ListView が以前の 4.1 よりも遅いようです。この bindView メソッドは 4.1 では完全に高速でしたが、新しい 4.2 では小さな不具合が見られます。でハードウェア アクセラレーションを明示的に有効にしようとしましたAndroidManifest.xmlが、あまり役に立ちませんでした。People (連絡先) アプリは 4.2 で完璧に動作しますが、これも extended によって実装されていると思いandroid.support.v4.widget.CursorAdapterます。また、目に見える改善なしに、すでに変更android.support.v4.widget.CursorAdapterを試みました。android.widget.CursorAdapter

@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: これはhttp://goo.gl/Yoe1u を使用して作成されたtraceview http://goo.gl/UmS3wです。

4

1 に答える 1

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"/>

助けてくれてありがとう!

于 2012-11-14T09:53:41.377 に答える