ImageView.setImageResource是我口吃ListView的罪魁祸首,现在怎么办?

时间:2013-12-29 13:35:21

标签: android listview android-listview android-imageview android-traceview

所以我的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( self 导致最多cpu时间的方法)。
  9. 如何优化ListView? (我的所有图像的磁盘大小不超过15 KB。)

    这是ImageView我正在设置xml:

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

    未提供任何性能提升。

0 个答案:

没有答案