Интерфейс, диалоги, темы, стили, меню
-
EspanaMia
- Сообщения: 24
- Зарегистрирован: 10 янв 2014, 11:03
Сообщение
EspanaMia » 25 июн 2014, 13:51
Подскажите, имеется ListView в котором выводится таймер. Проблема в том, что заметны подтормаживания, сейчас используется следующий код:
Код: Выделить всё
int mTimeSecond, mTimeMinute, mTimeHour;
final Handler timerHandler = new Handler();
Runnable timerRunnable = new Runnable() {
@Override
public void run() {
mTimeSecond = mTimeSecond + 1;
if (mTimeSecond >= 60) {
mTimeSecond = 0;
mTimeMinute = mTimeMinute + 1;
}
if (mTimeMinute >= 60) {
mTimeMinute = 0;
mTimeHour = mTimeHour + 1;
}
adapter.notifyDataSetChanged();
timerHandler.postDelayed(this, 1000);
}
};
timerHandler.postDelayed(timerRunnable, 500);
т.е. адаптер(ListView) обновляется каждую секунду, как это можно оптимизировать ?
-
anber
- Сообщения: 584
- Зарегистрирован: 10 июн 2013, 15:05
- Откуда: UA
Сообщение
anber » 25 июн 2014, 15:24
Подтормаживания в ListView это вообще эпичная проблема над которой безуспешно бьются бьются целые команды программистов
По сабжу- приведенный фрагмент кода - ниочем. Ну да - видно что adapter.notifyDataSetChanged(); вызывается раз в секунду. О том зачем это делается ни слова.
Исходя из этого решение - обновлять не раз в секунду а раз в 10 секунд
Но если серьезно - покажи что в getView() происходит и чем вызвана необходимость раз в секунду обновлять ListView()
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
-
KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Сообщение
KamiSempai » 25 июн 2014, 17:53
Обновление списка достаточно дорогая операция. Лучше сделать так, что бы строки списка обновлялись без обновления самого списка.
Например, можно сделать через обсерверы. При создании, View регистрируется на изменение таймера и каждую секунду она будет оповещена об этом.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
-
EspanaMia
- Сообщения: 24
- Зарегистрирован: 10 янв 2014, 11:03
Сообщение
EspanaMia » 26 июн 2014, 09:26
anber писал(а):чем вызвана необходимость раз в секунду обновлять ListView()
необходимость в том, чтобы отобразить изменения секунд у таймера.
KamiSempai писал(а):можно сделать через обсерверы. При создании, View регистрируется на изменение таймера и каждую секунду она будет оповещена об этом.
спасибо за совет, можно увидеть пример реализации ?