Просмотр списка очень медленный при прокрутке

#android #performance #listview

#Android #Производительность #просмотр списка

Вопрос:

Мне действительно нужна помощь, просмотр списка, который я использовал в своем приложении, очень медленный при прокрутке, как я могу это исправить? Я уменьшаю изображения, использую viewholder, но ничего не меняется..

Я новичок в Android : )

также получите это сообщение: Я / Хореограф: пропущено 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;
        }
    }
}
  

Одиночный 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>
  

Комментарии:

1. Выполняли ли вы какое-либо профилирование, чтобы определить, где нагрузка становится достаточно тяжелой, чтобы замедлить производительность listview?

2. Просто мысль, но попробуйте удалить изображения из элемента listview, чтобы посмотреть, не является ли это узким местом. Изображения действительно большого разрешения?

3. Мне просто интересно, почему у вас layout_height="match_parent" в вашей единственной строке, разве это не должно быть wrap_content

4. Спасибо за ответы. Вчера я сжал изображения на 6 Мб, чтобы уменьшить 3,7 Мб. после этого я узнал, как изменить размеры изображений на 100 пикселей, а затем снова уменьшить 3,7 МБ до 1,7 Мб, что работает очень и очень быстро. спасибо за поддержку, ребята.

Ответ №1:

Пожалуйста, попробуйте удалить значки из listview и посмотреть, улучшит ли это производительность. Возможно, вы используете изображения со слишком высоким разрешением. Я тоже заметил аномалии производительности при использовании изображений с высоким разрешением.

Дайте мне знать, если это поможет. Если нет, есть несколько других вещей, которые мы можем попробовать.

Комментарии:

1. Спасибо. Я меняю размеры изображения, тогда его работа теперь идеальна!!

2. @Boyka Я рад это слышать! Пожалуйста, "примите" мой ответ, чтобы люди увидели, что вы решили проблему.