Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
kvaka
31 / 31 / 3
Регистрация: 26.06.2012
Сообщений: 166
#1

Почему не ввыключается таймер? - Программирование Android

17.07.2012, 13:30. Просмотров 744. Ответов 1
Метки нет (Все метки)

Есть сервис
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
35
36
37
38
39
40
41
42
public class AttentionService extends Service{      
    public static final String MAKE_PERIODIC_ATTENTION="Make_periodic_attention";   
    private Timer attentionTimer;
    private Handler handler;
    
    @Override
    public void onCreate() {
        attentionTimer=new Timer("attention_timer");        
    };
 
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }   
    
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {                              
        attentionTimer.cancel();    
        attentionTimer=new Timer("attention_timer");
        attentionTimer.scheduleAtFixedRate(callAttention, 3*1000, 10*1000);     
        handler=new Handler();      
        return Service.START_STICKY;        
    }
 
    private TimerTask callAttention=new TimerTask() {       
        @Override
        public void run() {
            handler.post(makeToast);
        }
    };
    
    private  Runnable makeToast=new Runnable() {
        public void run() {         
            Intent intent=new Intent(MAKE_PERIODIC_ATTENTION);
            sendBroadcast(intent);          
            String msg="Attention!!!";
            Toast toast=Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT);
            toast.show();
        }
    };
}
Сервис должен периодически выводить всплывающее сообщение.
Все работает нормально до второго запуска приложения.
При втором запуске выдает ошибку

07-17 09:06:44.867: E/AndroidRuntime(20141): java.lang.RuntimeException: Unable to start service com.work.tapme.AttentionService@48001a50 with Intent { cmp=com.work.tapme/.AttentionService }: java.lang.IllegalStateException: TimerTask is scheduled already

Почему такое происходит, я же предусмотрительно в первую очередь отменяю возможную работу таймера? Я конечно вышел из положения запуская stopService перед startService, но как-то это коряво.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.07.2012, 13:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему не ввыключается таймер? (Программирование Android):

Не обнуляется таймер почему-то - Delphi
procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Enabled:=True; Form1.Button1.Enabled:=False; ...

Почему данные не передаются в таймер? - C#
Хотел сделать таймер, но почему-то мне кажется, что timer1_Tick не передает инфу в мой таймер... помогите решить проблему. При нажатии...

почему то не работает таймер на javascript - JavaScript
Скачал страницу отсюда: http://webinar2080.com/fs/index.php?id=14301194&email Хочу выцепить таймер. На компе запускаю таймер не...

Почему таймер срабатывает несколько раз? - C#
Доброго времени суток, друзья. Нужен таймер, по прошествии которого выполняется программа. Создаю таймер: Timer time = new Timer(); ...

Почему не работает таймер проверки процесса? - C# WPF
День добрый! Объясните дураку, почему таймер не работает? Что я делаю не так? Буду очень признателен! using System; using...

Почему не работает таймер в практически бесконечном цикле? - Delphi
Вобщем код такой. procedure TForm1.Timer1Stop(Sender: TObject); begin //procedure Timer1.Enabled:= False; //чтобы один раз...

1
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
17.07.2012, 14:02 #2
Цитата Сообщение от kvaka Посмотреть сообщение
attentionTimer.cancel(); attentionTimer=new Timer("attention_timer"); attentionTimer.scheduleAtFixedRate(callAttention, 3*1000, 10*1000);
попробуй так:
сначало если текущий таймертаск не равен нулю - кансели его
создавай новый таск.
вызывай у текущего таймера (если он не равен нулю) метод purge
таймер пересоздавать ненадо
а потом
Java
1
attentionTimer.scheduleAtFixedRate(callAttention, 3*1000, 10*1000);
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2012, 14:02
Привет! Вот еще темы с ответами:

Не могу понять почему в моем решении не работает таймер - JavaScript
Уже несколько часов голову ломаю, отладчик ошибок в коде не видит, но что то явно не так((((( Это обычный таймер с обратным отсчетом и...

Почему таймер медленнее идет нежели системное время? - C#
Написал таймер с милисекундами, а он идет медлее, напорядок! одна секунда на нём набегает за 12! почему так? и как это исправить? ...

Почему таймер в программе работает медленнее при закрытом eclipse - Java
Здравствуйте, решил я написать flappy bird. Устанавливая таймер Timer mainTimer = new Timer(10, this) Нажимая на кнопку play игра...

Почему это не работает? Структура "Таймер" - C++ WinAPI
Есть некая структура: struct timers { int N; UINT_PTR *ID; void expansion(int _N); void create_timer(HWND hwnd, UINT_PTR...


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

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

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