Улучшение плавности прокрутки в Android ListView

#android #android-listview #smooth-scrolling

#Android #android-listview #плавная прокрутка

Вопрос:

У меня есть Android ListView , который имеет небольшие (скажем, 1-5 кадров) заикания при прокрутке, примерно каждую секунду или около того. Я понимаю, что у многих телефонов Android есть эти проблемы с плавностью анимации, однако на моем телефоне (Motorola A855 под управлением Android 2.2) собственный список контактов прокручивается довольно плавно. Просмотр элементов в списке контактов более сложный, чем просмотр элементов в моем списке, который:

 <RelativeLayout>
    <TextView />
    <TextView />
</RelativeLayout>
  

Я только хочу добиться такой же плавности, как в собственном списке контактов. Кажется, что это должно быть возможно без оптимизации в машинном коде, но, возможно, я ошибаюсь в этом.

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

http://groups.google.com/group/android-developers/browse_thread/thread/7dc261a6b382ea74?pli=1

Похоже, ни одна из этих вещей не оказывает никакого влияния на производительность.

Могу ли я что-нибудь сделать в своем приложении для повышения производительности? Я собираюсь развернуть это приложение на нескольких телефонах, поэтому изменение настроек на телефоне или рутирование устройства в моем случае не вариант. Вот метод getView из моего класса adapter:

     public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater flater = (LayoutInflater)context.getSystemService(ListActivity.LAYOUT_INFLATER_SERVICE);
        layout = flater.inflate(R.layout.song_view, parent, false);
        TextView first = (TextView)layout.findViewById(R.id.firstLine);
        TextView second = (TextView)layout.findViewById(R.id.secondLine);

        Thing t = array.get(position);
        first.setText(t.title);
        second.setText(t.name);
        return layout;
    }
  

Заранее спасибо!

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

1. предоставьте некоторую информацию о вашем адаптере

2. Предполагается, что вы * по крайней мере, прочитали официальное руководство по Android. Это называется шаблоном Viewholder.

Ответ №1:

Трудно понять, почему это может происходить, не видя ваш код.

Однако стоит обратить внимание на ваш метод getView() в вашем ListAdapter (при условии, что вы используете пользовательский адаптер). Попробуйте повторно использовать представление, переданное в качестве аргумента этому методу, вместо того, чтобы каждый раз создавать новое. Также не делайте ничего слишком сложного в этом методе (например, сетевой вызов), на самом деле постарайтесь сделать его как можно более экономичным для достижения наилучшей производительности.

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

1. «Попробуйте повторно использовать представление, переданное в качестве аргумента этому методу, вместо того, чтобы каждый раз создавать новое». Это оказалось именно той проблемой. Я надеюсь, что это поможет другим людям, которые думают, что параметр convertView предназначен только для удобства. Я добавил свой оригинальный, неработающий код к вопросу, чтобы люди могли увидеть мою ошибку. Марк Эллисон, ты (странный, ужасный) компьютерный бог.

2. Что делать, если я использую SimpleCursorAdapter со вторым, не устаревшим конструктором? Должен ли я расширить его или он должен делать это из коробки?

3. Он будет использовать автоматическую переработку просмотров. Если вы переопределите getView (), вам нужно будет обработать переработку представления.

Ответ №2:

Вы пробовали эффективный адаптер http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html

С моей точки зрения, проблема плавности анимации связана с тем, что сборщик мусора работает в фоновом режиме. Если вы создаете много объектов, то вы увидите задержку в прокрутке listview.

Надеюсь, это поможет.

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

1. Исходная ссылка устарела, попробуйте эту: linuxtopia.org/online_books/android/devguide/guide/samples /…