0

そのため、ListView が携帯電話で途切れていたので、TraceView を使用して原因を特定しました。

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        View view = inflater.inflate(R.layout.menu_row, parent, false);
        ViewHolder holder = new ViewHolder();
        // setting other Views.
        holder.icon = (ImageView) view.findViewById(R.id.icon);
        view.setTag(holder);
        return view;
    }

    @Override
    public void bindView(View v, Context context, Cursor c) {
        ViewHolder holder = (ViewHolder) v.getTag();
        // getting other Views

        String imgUrl = c.getString(6);

        int resource = getResources().getIdentifier(imgUrl, "drawable", getActivity().getPackageName());
        if (resource != 0) {
            holder.icon.setImageResource(resource);
            return;
        }
   }

予想通り、すべてのメソッド呼び出しで newView と bindView に最も時間がかかっていました。

  • newView() はすべての時間を inflater.inflate(R.layout.menu_row, parent, false); で費やしています。電話
  • bindView() は、すべての時間を holder.icon.setImageResource(resource); で費やしています。

setImageResource をさらに掘り下げたところ、呼び出し階層は次のようになりました: (これらのメソッドはすべて CPU 時間の 99% でした):

  1. ImageView.setImageResource
  2. ImageView.resolveUri
  3. Resources.getDrawable
  4. Resources.loadDrawable
  5. Drawable.createFromResourceStream
  6. BitmapFactory.decodeResourceStream
  7. BitmapFactory.decodeStream
  8. BitmapFactory.nativeDecodeAsset (これは、自身が最も多くの CPU 時間を引き起こしているメソッドです)。

ListView を最適化するにはどうすればよいですか? (すべての画像のディスク サイズは 15 KB 以下です)。

これは私がxmlを設定しているImageViewです:

<ImageView
        android:id="@+id/icon"
        android:layout_width="0dp"
        android:layout_height="85dp"
        android:layout_gravity="center_vertical"
        android:layout_marginRight="10dp"
        android:layout_weight="25"
        android:adjustViewBounds="true"
        android:contentDescription="@string/description_item"
        android:minHeight="85dp"
        android:minWidth="85dp"
        android:scaleType="fitCenter"
         />

編集: ImageView xml を次のように変更しました。

<ImageView
        android:id="@+id/icon"
        android:layout_width="85dp"
        android:layout_height="85dp"
        android:scaleType="center"
        android:contentDescription="@string/description_item"
        />

パフォーマンスの向上はありませんでした。

4

0 に答える 0