Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Java Мобильная разработка (Android)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2014, 11:01   #1
fbus
Форумчанин
 
Аватар для fbus
 
Регистрация: 23.10.2008
Сообщений: 460
По умолчанию Работа с таймером

Всем привет. Решил попрактиковаться на яве (хотя меня о нее выворачивает просто). Наткнулся на необходимость совершать какие-либо действия через определеный промежуток времени. гугл привел меня к классу java.util.Timer.
Делаю так:
Код:
....
Button button1;
    Timer JT;
    int i = 0;
....

 JT = new Timer();
        final TimerTask tt = new TimerTask() {
            @Override
            public void run() {
                i++;
                if (button1.getVisibility() == View.VISIBLE) button1.setVisibility(View.INVISIBLE); else button1.setVisibility(View.VISIBLE);

            }
        };

вызов:
 button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                JT.schedule(tt,100,100);
            }
        });
Чисто в теории кнопка должна поменять свою видимость через каждые 100мс. На практике - при нажатии кнопки успешно инкрементируется i, на второй строчке (неважно что это за строчка. даже пробовал тупо менять надпись в textView) вылетает.
В Яве не силен, поэтому может кто что подскажет?
fbus вне форума Ответить с цитированием
Старый 04.08.2014, 10:09   #2
fbus
Форумчанин
 
Аватар для fbus
 
Регистрация: 23.10.2008
Сообщений: 460
По умолчанию

Походу дохлая ветка...
fbus вне форума Ответить с цитированием
Старый 04.08.2014, 23:54   #3
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

AsyncTask + Thread#wait, Activity#runOnUiThread + ScheduledExecutorService
А таймер выкинь на помойку - не юзает его уже давно никто. И производить действия над UI можно только в главном потоке приложения.
Carbon вне форума Ответить с цитированием
Старый 06.08.2014, 09:28   #4
fbus
Форумчанин
 
Аватар для fbus
 
Регистрация: 23.10.2008
Сообщений: 460
По умолчанию

Спасибо за наводку, ты не мог бы написать пример небольшой или ссылку на хороший учебник?
fbus вне форума Ответить с цитированием
Старый 06.08.2014, 22:32   #5
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Код:
long period = 100;
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate(new Runnable() {
	@Override
	public void run() {
		runOnUiThread(new Runnable() {
			@Override
			public void run() {
				// UI update
			}
		});
	}
}, period, period, TimeUnit.MILLISECONDS);
Это будет работать только в подклассе Activity. Если есть оъект класса View, то запустить код в потоке UI можно так:
Код:
View view = ...; // Your view
Activity owner = (Activity)view.getContext();
owner.runOnUiThread(...);
Можно так:
Код:
final long period = 100;
AsyncTask<Void, Void, Void> timerTask = new AsyncTask<Void, Void, Void>() {
	@Override
	protected Void doInBackground(Void... params) {
		try {
			Thread.currentThread().wait(period);
			publishProgress();
		}
		catch (InterruptedException ex) {
			// Thread interrupted
		}
		
		return null;
	}
	
	@Override
	protected void onProgressUpdate(Void... values) {
		super.onProgressUpdate(values);
		// UI update
	}
};
timerTask.execute();
Carbon вне форума Ответить с цитированием
Старый 07.08.2014, 08:56   #6
fbus
Форумчанин
 
Аватар для fbus
 
Регистрация: 23.10.2008
Сообщений: 460
По умолчанию

Спасибо. Буду пробовать.
fbus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с таймером С# JK0 Помощь студентам 1 31.10.2011 16:25
работа с таймером Kazik Помощь студентам 5 04.06.2010 21:07
Работа с таймером LordTor Общие вопросы Delphi 1 09.11.2009 14:08
Работа с таймером Alika Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 12.11.2007 19:27