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

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

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

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

17.07.2012, 13:30. Просмотров 731. Ответов 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, но как-то это коряво.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.07.2012, 13:30     Почему не ввыключается таймер?
Посмотрите здесь:

Зацикленный таймер - Программирование Android
Привет всем! Мне нужно сделать, чтобы каждые 0.1 секунды происходило какое-то действие. Подскажите, как лучше и не ресурсоемко реализовать...

Таймер не работает - Программирование Android
сколько не пытался сделать таймер на androide приложение у меня всегда крешевалась на этой строке glava.setText(""+tr); пробывал...

Одноразовый таймер - Программирование Android
Подскажите пожалуйста - есть ли готовая конструкция? Нужно при нажатии на кнопку запустить таймер на (например) 5 секунд, после которого...

Таймер с вибрацией - Программирование Android
Как сделать так, чтобы по окончании CountDownTimer , телефон вибрировал. Вибрация разрешена в манифесте и android.os.Vibrator подключено. ...

Таймер в Java - Программирование Android
сделал я вот такой код для таймера: TextView text; new CountDownTimer(30000, 1000) { public void onTick(long...

Таймер Android - Программирование Android
Всем привет. У меня вот такая проблема, что криво работают пауза и возобновление. При нажатии на паузу таймер как бы приостанавливается, но...

Приостановить таймер из таймера - Программирование Android
Есть задача мигать кнопкой. Но с большим интервалом! - длинная пауза - поменяли1 - короткая пауза - ... Как подобное можно сделать? ...

Некорректно работает таймер - Программирование Android
Здравствуйте! Написал для себя мелкое приложение в котором есть таймер, кнопка которая его останавливает и запускает, кнопка которая...

Таймер обратного отсчёта - Программирование Android
Мне необходимо сделать таймер, которому просто даётся long time, и он запускает отображение времени в формате HH:MM:SS, а при времени...

Таймер для Android - Программирование Android
есть функция которую необходимо вызывать через каждые 60 сек, пока приложение находится в фокусе как узнать что приложение в фокусе?...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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);
Yandex
Объявления
17.07.2012, 14:02     Почему не ввыключается таймер?
Ответ Создать тему
Опции темы

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