Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
psinetron
8 / 8 / 5
Регистрация: 24.01.2012
Сообщений: 59
#1

Handler и интервал времени - Программирование Android

01.11.2012, 18:12. Просмотров 1816. Ответов 4
Метки нет (Все метки)

Создаю хэндлер:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Handler h = new Handler();
h.post(obrtimer);
 
Runnable obrtimer = new Runnable() {
    
    public void run() {
        if (secnd<0) {secnd=59; mint--;}
        TextView tmtext = (TextView) findViewById(R.id.retroTime1);
        tmtext.setText("0" + mint + ":" + secnd);
        secnd--;
        h.postDelayed(obrtimer, 1000);
        
    }
};
Это обычный таймер обратного отсчета. В теории должен обновляться каждую секунду. На практике - время идет не с той скоростью, с которой оно должно идти. На эмуляторе оно запаздывает примерно на 3 секунды в минуту. В принципе в моем случае не слишком страшно. А вот запустил на телефоне, и время идет быстрее. За минуту хэндлер отсчитал 62 секунды. при том, что телефон не самый быстрый. Не получится ли так, что на каком-нибудь 6 ядерном телефоне время пройдет еще быстрее? Почему вообще такая разница? Есть ли варианты точного задания интервалов выполнения кода?
http://www.cyberforum.ru/android-dev/thread1687320.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2012, 18:12
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Handler и интервал времени (Программирование Android):

Handler
import android.app.Activity; import android.os.Bundle; import...

Не работает Handler
Я нахожусь на 66 уроке startandroid, здесь упоминается Handler. Почему то...

Handler timer
Добрый вечер. С помощью какого метода в Handler...

Handler vs Service vs AsynkTask
Есть 2 Activity, пусть A1 и A2. В методе onCreate() Activity A1 запускается...

Про Handler и ProgressBar
Есть 2 кнопки - Start и Stop, соответственно запуск и остановка прогресса в...

4
kvaka
31 / 31 / 3
Регистрация: 26.06.2012
Сообщений: 166
01.11.2012, 23:29 #2
вообще странно, что насчитал больше. Насколько я знаю, handler не гарантирует выполнения задачи точно через указанные промежутки времени, т. к. выполнение задачи идет в общем потоке (в котором хендлер создан) и размещено в очереди. Если хочешь чтобы время было точным сделай так:
создай отдельный поток, в котором через определенные промежутки (например 100 мс) делай запрос System.currentTimeMillis(). Потом результат сравнивай со временем старта и полученное время через handler выводи на экран.
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
02.11.2012, 11:43 #3
Может такой вариант подойдёт?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.util.Timer;
import java.util.TimerTask;
 
import android.os.Handler;
 
/**
 * Yuriy Aizenberg 02.11.2012
 */
 
public class Interval {
    Timer mTimer = new Timer(true);
 
    public Interval(int timerDelay, int timerPeriod) {
        mTimer.schedule(new mTimerTask(), timerDelay, timerPeriod);
    }
 
    class mTimerTask extends TimerTask {
 
        @Override
        public void run() {
            // TODO тут код, если не нужно менять что-либо в графическом потоке
 
            final Handler mHandler = new Handler();
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    // TODO или тут, если нужнен UI-поток
                }
            });
        }
 
    }
 
}
0
kvaka
31 / 31 / 3
Регистрация: 26.06.2012
Сообщений: 166
02.11.2012, 13:20 #4
С таймером тоже может быть погрешность - вот цитата отсюда:
http://developer.android.com/referen...util.TimerTask,long,long)

This class does not offer guarantees about the real-time nature of task scheduling. Multiple threads can share a single timer without synchronization.
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.11.2012, 13:32 #5
склоняюсь к варианту Кваки. тоже о таком подумал года читал первый пост.
0
02.11.2012, 13:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2012, 13:32
Привет! Вот еще темы с решениями:

Handler, поток не останавливается
Добрый вечер. Не могу остановить таймер, при переходе на другую Activity....

Работа с Handler из другого активити
Здравствуйте, пишу чат приложение и не могу понять как можно обрабатывать...

Handler при пересоздании активити
У меня есть поток Thread, который запускается во фрагменте и получает ссылку на...

Передача сообщения из потока. Handler
Добрый день, пытаюсь передать сообщение через Handler из потока, для обновления...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru