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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
#1

Не выполняется задание таймера - Программирование Android

03.12.2012, 21:12. Просмотров 1210. Ответов 13
Метки нет (Все метки)

Запускаю сервис, в нем в отдельном потоке запускаю класс наследованный от Runnable и убиваю сервис, а в Runnable запускаю Timer с TimerTask. Мне кажется, что я все это делаю как то не так. Ну по крайней мере минут через 10-15 таймер срабатывает как надо, а вот если его завести на час, то не работает. Подскажите как правильно пользоваться таймером, нужно ли его запускать в отдельном потоке? Спасибо.

Добавлено через 1 час 22 минуты
Почитал, что Timer не рекомендуют использовать если период его работы длительное время, т.к. он буде впустую кушать ресурсы и рекомендуют использовать ScheduledThreadPoolExecutor, но что то я не понял где связь между механизмом распределения потоков и таймером? Как вообще организовывать задачи типа будильника, что бы в определенное время выдавалось например уведомление или отправлялось сообщение или еще что-то. Подскажите, запутался...

Добавлено через 2 часа 39 минут
Блин, подскажите кто-нибудь, почему на эмуляторе TimerTask выполняется, а в телефоне нет
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2012, 21:12     Не выполняется задание таймера
Посмотрите здесь:

Создание таймера - Программирование Android
Кто-нибудь может скинуть туториал по созданию таймера?! Хотелось бы научиться делать на студию, но материал не могу найти

Перезапуск таймера - Программирование Android
Странное поведение таймера. Если он отрабатывает, то в методе run() я посылаю некое событие. Если же я хочу прервать его работу, то...

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

Как из таймера обратиться к UI - Программирование Android
как из таймера обратиться к UI?? Возможна ли такая схема?? может через View.post(Runnable) как то можно??можете привести фрагмент кода?

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

Создание таймера и работа с ним - Программирование Android
доброго времени суток создаю таймер вот таким образом package com.example.image4; import java.util.Timer; import...

Вызов makeSomeThing() из-под Таймера - Программирование Android
Доброго времени суток. Необходимо задать выполнение makeSomeThing(), находящегося в таймере. class MyTimerTask extends TimerTask { ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
03.12.2012, 21:28     Не выполняется задание таймера #2
без кода не разобраться.
таймер демон?
зачем вам сервис?
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
03.12.2012, 21:53  [ТС]     Не выполняется задание таймера #3
Не знаю, что из кода даже выкладывать. хотя бы сам принцип на словах, как действовать. Есть виджет. Когда до времени окончания остается меньше часа предполагается включить таймер, чтобы на виджете отсчитывались минуты, когда минуты кончаться должно выйти уведомление о завершении времени.
Сервис создаю потому, что таймер отказался работать в активти виджета для его обновления, а так работает, но только в жмуляторе на телефоне похоже эту задачу убивает кто то. Читал, что таймерные задачи это мусор.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
03.12.2012, 22:42     Не выполняется задание таймера #4
Цитата Сообщение от dubok79 Посмотреть сообщение
Не знаю, что из кода даже выкладывать.
создание таймера, запуск тасков.
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
04.12.2012, 22:49  [ТС]     Не выполняется задание таймера #5
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
          Calendar c = new Calendar;
          c.getInstance(TimeZone.getDefault());
          int msec = 999 - c.get(Calendar.MILLISECOND);
          //обычный класс extended Runnable  
          //в методе run которого обновление виджета
          final MyRun mr = new MyRun();
          tTask = new TimerTask() {
              @Override
              public void run() {
                  new Thread(mr).start();
              }
          };
          timer = new Timer();
          timer.scheduleAtFixedRate(tTask, msec, 60000);
Добавлено через 23 часа 59 минут
Подскажите хотя бы как запустить таймер, что ОСь его не убивала? В сервисе запускать и не убивать его пока не сделаются все задачи таймера?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
04.12.2012, 23:42     Не выполняется задание таймера #6
разберитесь почему без сервиса не работает.
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
05.12.2012, 00:00  [ТС]     Не выполняется задание таймера #7
Цитата Сообщение от V0v1k Посмотреть сообщение
разберитесь почему без сервиса не работает.
А как? На эмуляторе работает, на телефоне нет. Просто ничего не происходит. Пытался дебажить, оно даже не заходит в класс с сервисом.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
05.12.2012, 01:21     Не выполняется задание таймера #8
Цитата Сообщение от dubok79 Посмотреть сообщение
без сервиса
.....
kvaka
29 / 29 / 3
Регистрация: 26.06.2012
Сообщений: 163
05.12.2012, 10:18     Не выполняется задание таймера #9
обратите внимание на AlarmManager. Думаю, он вам подходит.
lifestyle
Mobile Developer
232 / 228 / 4
Регистрация: 10.05.2009
Сообщений: 917
07.12.2012, 01:07     Не выполняется задание таймера #10
Я думаю все очень просто. Сервис это процесс , Thread это поток, поток привязан к процессу, когда процесс убивается поток прерывается вот и все.
Можно проще сделать - создать сервис с Handler'ом и отсылать Message с задержкой, главное сервису приоретет дать высокий, что не закрылся если что ...

Добавлено через 1 минуту
Цитата Сообщение от kvaka Посмотреть сообщение
обратите внимание на AlarmManager. Думаю, он вам подходит.
тоже вариант... но в Deep Sleep Mode он не сработает...
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
07.12.2012, 09:09  [ТС]     Не выполняется задание таймера #11
Цитата Сообщение от lifestyle Посмотреть сообщение
Сервис это процесс , Thread это поток, поток привязан к процессу, когда процесс убивается поток прерывается вот и все.
Вроде бы все, так, но почему на эмуляторе после убивания процесса таймер в потоке продолжал успешно работать пока я его не убью? И еще заметил такую особенность, в уроках по сервисам, там этот сервис отслеживается на вкладке Device и когда сервис убивается, он оттуда исчезает. Так вот в эмуляторе (дроид 4.2) даже после возврата true методом stopSelfResult эта строчка не пропадала. Наверное из-за этого таймер и работал.
Еще я добавлял в манифест строчку
XML
1
android:process=":myservice"
, может и в ней дело, не совсем понял для чего она.

И, спасибо за рекомендации.
prtigger
0 / 0 / 0
Регистрация: 07.12.2012
Сообщений: 6
07.12.2012, 20:33     Не выполняется задание таймера #12
Цитата Сообщение от dubok79 Посмотреть сообщение
Добавлено через 2 часа 39 минут
Блин, подскажите кто-нибудь, почему на эмуляторе TimerTask выполняется, а в телефоне нет
Могу предположить.
Сам с этим долго мучился. Но по факту, таймер не срабатывает в спящем режиме.
Ясное дело, что эмулятор в спящий режим не переходит, потому на нем все и работает, как часики.

Нужно воспользоваться AlarmManager

Добавлено через 1 минуту
Цитата Сообщение от dubok79 Посмотреть сообщение
Еще я добавлял в манифест строчку
XML
1
android:process=":myservice"
, может и в ней дело, не совсем понял для чего она.
Эта строчка означает, что сервис надо запустить в отдельном потоке, а не в общем потоке приложения. Вот и вся разница
lifestyle
Mobile Developer
232 / 228 / 4
Регистрация: 10.05.2009
Сообщений: 917
07.12.2012, 21:15     Не выполняется задание таймера #13
Цитата Сообщение от prtigger Посмотреть сообщение
Эта строчка означает, что сервис надо запустить в отдельном потоке, а не в общем потоке приложения. Вот и вся разница
Не потоке а в отдельном процессе,

Цитата Сообщение от dubok79 Посмотреть сообщение
Вроде бы все, так, но почему на эмуляторе после убивания процесса таймер в потоке продолжал успешно работать пока я его не убью? И еще заметил такую особенность, в уроках по сервисам, там этот сервис отслеживается на вкладке Device и когда сервис убивается, он оттуда исчезает. Так вот в эмуляторе (дроид 4.2) даже после возврата true методом stopSelfResult эта строчка не пропадала. Наверное из-за этого таймер и работал.
Еще я добавлял в манифест строчку
Код XML
1
androidrocess=":myservice"
, может и в ней дело, не совсем понял для чего она.
И, спасибо за рекомендации.
1. Читай документацию
public final boolean stopSelfResult (int startId)

Added in API level 1
Stop the service if the most recent time it was started was startId. This is the same as calling stopService(Intent) for this particular service but allows you to safely avoid stopping if there is a start request from a client that you haven't yet seen in onStart(Intent, int).

Be careful about ordering of your calls to this function.. If you call this function with the most-recently received ID before you have called it for previously received IDs, the service will be immediately stopped anyway. If you may end up processing IDs out of order (such as by dispatching them on separate threads), then you are responsible for stopping them in the same order you received them.

Parameters
startId The most recent start identifier received in onStart(Intent, int).
Returns
Returns true if the startId matches the last start request and the service will be stopped, else false.
See Also
stopSelf()

2. Думаю использование public boolean stopService (Intent name) даст результат в эмуляторе аналогичный того что на телефоне.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.12.2012, 21:59     Не выполняется задание таймера
Еще ссылки по теме:

Запуск таймера после закрытия второй Активити - Программирование Android
Есть две Активити, на первой есть Chronometer. При запуске активити1 запускается таймер, при переходе в активити2 таймер в первой...

Остановка выполнения таймера (CountDownTimer) из другого класса - Программирование Android
При входе в активити в методе onCreate выполняется таймер: new CountDownTimer(40000, 1000) { public void onTick(long...

Работа таймера при закрытии приложения (фоновый режим) - Программирование Android
Добрый день. Каким образом можно заставить работать таймер (возможно через сервисы) при закрытом приложении или же когда приложение в...

Не выполняется условие if - Программирование Android
Здравствуйте, уважаемые программисты! Не могли бы вы мне помочь? В результате "сложных" логических исследований ошибок кода, я пришел...

Не выполняется сервис android - Программирование Android
Приветствую. Пытаюсь запустить сервис. Делаю так package com.qwe.threadService; import android.content.Intent; import...


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

Или воспользуйтесь поиском по форуму:
prtigger
0 / 0 / 0
Регистрация: 07.12.2012
Сообщений: 6
07.12.2012, 21:59     Не выполняется задание таймера #14
Цитата Сообщение от lifestyle Посмотреть сообщение
Не потоке а в отдельном процессе,
Согласен, не то слово употребил.
Yandex
Объявления
07.12.2012, 21:59     Не выполняется задание таймера
Ответ Создать тему
Опции темы

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