Таймер в ListView

Интерфейс, диалоги, темы, стили, меню
Ответить
EspanaMia
Сообщения: 24
Зарегистрирован: 10 янв 2014, 11:03

Таймер в ListView

Сообщение 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

Re: Таймер в ListView

Сообщение anber » 25 июн 2014, 15:24

Подтормаживания в ListView это вообще эпичная проблема над которой безуспешно бьются бьются целые команды программистов :)

По сабжу- приведенный фрагмент кода - ниочем. Ну да - видно что adapter.notifyDataSetChanged(); вызывается раз в секунду. О том зачем это делается ни слова.
Исходя из этого решение - обновлять не раз в секунду а раз в 10 секунд :lol:

Но если серьезно - покажи что в getView() происходит и чем вызвана необходимость раз в секунду обновлять ListView()
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Таймер в ListView

Сообщение altwin » 25 июн 2014, 16:29

Есть же куча рабочих примеров, например: http://stackoverflow.com/a/20266067/2611075 зачем вообще заводить переменные под минуты, секунда и т.д. и еще вычислять что -то с ними
ну или есть же подобные стандартные штуки - http://developer.android.com/intl/ru/re ... Timer.html
а listview как и другое в android всегда будет подтормаживать... это же java.
Изображение

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Таймер в ListView

Сообщение KamiSempai » 25 июн 2014, 17:53

Обновление списка достаточно дорогая операция. Лучше сделать так, что бы строки списка обновлялись без обновления самого списка.
Например, можно сделать через обсерверы. При создании, View регистрируется на изменение таймера и каждую секунду она будет оповещена об этом.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

EspanaMia
Сообщения: 24
Зарегистрирован: 10 янв 2014, 11:03

Re: Таймер в ListView

Сообщение EspanaMia » 26 июн 2014, 09:26

anber писал(а):чем вызвана необходимость раз в секунду обновлять ListView()
необходимость в том, чтобы отобразить изменения секунд у таймера.
KamiSempai писал(а):можно сделать через обсерверы. При создании, View регистрируется на изменение таймера и каждую секунду она будет оповещена об этом.
спасибо за совет, можно увидеть пример реализации ?

Ответить