【问题标题】:ListView very slow when scrollingListView 滚动时很慢
【发布时间】:2016-10-19 21:42:57
【问题描述】:

我真的需要帮助,我在应用程序中使用的 Listview 在滚动时非常慢,我该如何解决?我缩小了图像,使用了视图,但没有任何改变..

我是 android 的初学者 :)

还收到此消息:I/Choreographer:跳过 32 帧!应用程序可能在其主线程上做了太多工作。

这是我的代码

public class asker extends Activity {
    ListView list;
    String[] askerbaslik;
    int[] images =

            {R.drawable.barbar_icon, R.drawable.okcu_icon,
                    R.drawable.dev_icon,
                    R.drawable.goblin_icon,
                    R.drawable.duvar_kirici_icon, R.drawable.balon_icon,
                    R.drawable.buyucu_icon, R.drawable.sifaci_icon,
                    R.drawable.ejderha_icon,
                    R.drawable.pekka_icon, R.drawable.yavruejder_icon, R.drawable.madenci_icon};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listview);

        Resources res = getResources();
        askerbaslik = res.getStringArray(R.array.asker_adlari);

        list = (ListView) findViewById(R.id.listview);

        ilyasadapter adapter = new ilyasadapter(this, askerbaslik, images);

        list.setAdapter(adapter);
    }

    class ilyasadapter extends ArrayAdapter<String> {
        Context context;
        int[] images;
        String[] titlearray;

        ilyasadapter(Context c, String[] titles, int imgs[]) {
            super(c, R.layout.liste_tasarim, R.id.asker_baslik, titles);
            this.context = c;
            this.images = imgs;
            this.titlearray = titles;
        }

        class MyViewHolder {
            TextView mytitle;
            ImageView myimage;

            MyViewHolder(View v) {

                mytitle = (TextView) v.findViewById(R.id.asker_baslik);
                myimage = (ImageView) v.findViewById(R.id.asker_icon);
            }
        }


        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View row = convertView;
            MyViewHolder holder = null;

            if (row == null) {

                LayoutInflater inflater = (LayoutInflater)
                        context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
                row = inflater.inflate(R.layout.liste_tasarim, parent, false);
                holder = new MyViewHolder(row);

                row.setTag(holder);

                Log.d("test", "creating a new row");
            } else {

                holder = (MyViewHolder) row.getTag();

                Log.d("test", "Recycling stuff");
            }

            holder.myimage.setImageResource(images[position]);
            holder.mytitle.setText(titlearray[position]);

            return row;
        }
    }
}

单行.xml

<?xml version="1.0" encoding="utf-8"?>

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">


<ImageView
    android:layout_marginTop="5dp"
    android:id="@+id/asker_icon"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:src="@drawable/barbar_icon"
    android:background="@drawable/rounded_corner"

    ></ImageView>

<TextView
    android:id="@+id/asker_baslik"
    android:layout_marginTop="40dp"
    android:layout_marginLeft="30dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Asker ismi"
    android:textColor="#ffffff"
    android:textSize="15dp"
    android:fontFamily="sans-serif"
    />

  </LinearLayout>

我的列表视图

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#455A64" >
<ListView
    android:id="@+id/listview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:divider="#263238"
    android:dividerHeight="2px"
    />
 </RelativeLayout>

【问题讨论】:

  • 您是否进行了任何分析以确定负载在何处变得足以降低列表视图的性能?
  • 只是一个想法,但尝试从列表视图项中删除图像,看看这是否是瓶颈所在。图像真的很大吗?
  • 我只是想知道为什么你的单行中有 layout_height="match_parent" 不应该是 wrap_content
  • 感谢您的回答。昨天,我压缩了 6 mb 的图像以减少 3 .7 mb。之后我从这里学习将图像大小更改为 100 像素,然后再次将应用程序减小 3.7 mb 到 1.7 mb,这是非常非常快的工作。谢谢大家的支持。

标签: android performance listview


【解决方案1】:

请尝试从列表视图中删除图标,看看是否可以提高性能。您可能正在使用分辨率太高的图像。我也注意到performance anomalies 在使用高分辨率图像时。

如果有帮助,请告诉我。如果没有,我们可以尝试其他一些方法。

【讨论】:

  • 谢谢。我改变了图像大小,现在它的工作完美了!!
  • @Boyka 我很高兴听到它!请“接受”我的回答,以便人们看到您解决了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-06
  • 2015-01-22
  • 1970-01-01
相关资源
最近更新 更多