Как сделать таймер андроид студио

Таймер — классы Timer и TimerTask

Классы Timer и TimerTask из пакета java.util позволяют планировать запуск задания на определённое время в будущем. Вы можете создать поток, выполняющий в фоновом режиме и ожидающий заданное время. Когда время истечёт, задача, связанная с этим потоком, будет запущена. С помощью параметров можно запланировать задачу на повторяющий запуск либо на запуск по определённой дате. Вам не нужно создавать поток с помощью класса Thread, так как таймер упрощает эту задачу.

Учитывайте обстоятельство, что таймер выполняется в своём потоке и не должнен задействовать UI-элементы, которые выполняются в своём потоке. Для решения этой проблемы можете использовать метод runOnUiThread() для обновления данных у компонентов.

Классы Timer и TimerTask работают в связке. Класс Timer используется для планирования выполнения задачи. Запланированная к выполнению задача должна быть экземпляром класса TimerTask. Вы сначала создаёте объект класса TimerTask, а затем планируете его запуск с помощью класса Timer.

Класс TimerTask реализует интерфейс Runnable и может быть использован для создания потока выполнения.

В классе TimerTask имеется абстрактный метод run(), который следует переопределить. Метод должен содержать исполняемый код.

Метод cancel() прерывает задание и возвращает значение true, если выполнение задания прервано.

Метод scheduleExecutionTime() возвращает время, на которое последний раз планировался запуск задания.

Как только задача создана, она планируется для выполнения объектом класса Timer.

Методы класса Timer:

  • void cancel() — прерывает поток таймера
  • int purge() — удаляет прерванные задания из очереди таймера
  • void schedule (TimerTask task, long delay) — задание task планируется к выполнению через период в миллисекундах, переданный в параметре delay
  • void schedule (TimerTask task, long delay, long period) — задание task планируется к выполнению через период в миллисекундах, переданный в параметре delay. Затем задание повторяется повторно периодически — каждые period миллисекунд
  • void schedule (TimerTask task, Date when) — задание task планируется на время, указанное в параметре when
  • void schedule(TimerTask task, Date when, long period) — задание task планируется на время, указанное в параметре when. Затем задание выполняется повторно периодически — каждые period миллисекунд
  • void scheduleAtFixedRate (TimerTask task, long delay, long period) — задание task планируется к выполнению через период в миллисекундах, переданный в параметре delay. Затем задание выполняется повторно периодически — каждые period миллисекунд. Время каждого повтора задаётся относительно первого запуска.
  • void scheduleAtFixedRate (TimerTask task, Date when, long period) — задание task планируется к выполнению на время, указанное в параметре when. Задание затем выполняется повторно периодически — каждые period миллисекунд. Время каждого повтора задаётся относительно первого запуска.
Читайте также:  Anydesk для андроид как управлять

Между методами schedule() и scheduleAtFixedRate() есть небольшая разница, которая заключается в разном поведении, которое зависит от стартовой точки запуска. Так второй метод работает как startTime + iterationNumber * delayTime и помнит время запуска. А обычный метод schedule() помнит последнее время выполнения и работает по формуле lastExecutionTime + delayTime. Для быстрых операций это не сильно отличается, а при ресурсоёмких задач разница будет заметна, например, при работе сборщика мусора приложение может притормозить и следующая задача может запуститься чуть позже.

Как только объект класса Timer создан, запуск планируется вызовом его метода schedule() и его родственника (см. выше).

Запускаем таймер

Напишем простой пример. Подготовим разметку.

Будем использовать два варианта таймера — одиночное и периодическое срабатывание.

Генерируем случайные показания

Допустим нам нужны ежедневные показания термометра. Но мы не можем ждать весь день при написании программ. Поэтому мы можем случайным образом создавать показания с небольшим интервалом и проверить поведение приложения.

Для удобства создадим отдельный класс-утилиту.

Создадим в классе активности метод для генерации значений и вызовем в onCreate().

Источник

Как сделать таймер андроид студио

В этом небольшом уроке мы научимся использовать в своем приложении такую простую и распространенную штуку, как CountDownTimer — счетчик обратного отсчета. Этот элемент Android интерфейса, как и любой другой мобильной или компьютерной ОС каждому из нас знаком до боли. Сколько времени вы убили глядя на надпись в файлообменнике — ссылка будет доступна через 10, 9, 8. Теперь пришло время и нам научиться делать в своем приложении такую пакость.

Создаем новый проект, выбираем Blank Activity и Android 2.2+. Пользовательский интерфейс нашего сегодняшнего приложения будет прост как дважды два — всего лишь один элемент TextView, в котором будет происходить текстовое отображение обратного отсчета. Открываем файл activity_main.xml и добавляем туда элемент TextView:

Создание таймера обратного отсчета совсем не сложно, для этого используется специальный встроенный класс под названием CountDownTimer. При настройке таймера такого типа используется всего 2 переменные: время до окончания обратного отсчета и шаг, с которым происходит отсчет, все это в миллисекундах. В классе CountDownTimer используется два метода: onTick () и onFinish (). В методе onTick () происходит настройка обновления текстовой информации о изменении показаний таймера, а в методе onFinish () происходит настройка желаемых действий после окончания обратного отсчета (например, подождите 3, 2, 1. Скачать файл, или переход на другой экран, что то в этом роде).

Мы сделаем простейшую программу, в которой таймер обратного отсчета будет отсчитывать 20 секунд, после чего в элементе TextView будет появляться надпись «Бабах!» (как будто мы сделали таймер на бомбе).

Читайте также:  Лучшие противоударные андроид смартфоны

Чтобы это сотворить, открываем файл MainActivity.java и добавляем сюда код:

Запускаем и проверяем работоспособность нашего таймера обратного отсчета:

Источник

Как сделать таймер андроид студио

Для того, чтобы в фоновом режиме выполнить отчет времени, по истечению которого в вашем приложении должно произойти какое либо событие, можно использовать встроенный класс Timer и TimerTask. Сам класс Timer служит исключительно для отсчета времени, он может работать в двух режимах: одноразовое выполнение задания, либо же повторяющееся действие (например, напоминание, что у вас не лицензионная версия антивируса :). Метод TimerTask используется для описания действий, которые должны происходить по истечению времени отсчета в таймере Timer. То есть, здесь реализуется визуальное проявление работы таймера, иначе он просто будет считать себе в фоне и все без толку, никто о нем даже не узнает.

Мы сделаем сначала совсем простую вещь — создадим приложение с таймером, которое по истечению времени в одну секунду будет высвечивать пользователю текущее время на аппарате, а потом попробуем усложнить задачу и выполнять с помощью таймера запуск второго activity.

Создаем новый проект, выбираем Blank Activity. В файле activity_main.xml создаем интерфейс нашего приложения:

Теперь вся остальная работа будет происходить с помощью кода в MainActivity.java. Здесь мы выполняем стандартные шаги: объявляем используемые объекты, связываемся с элементами интерфейса. Ну и задаем Timer и метод для выполнения задачи по истечению таймера TimerTask:

Вот так выполняется реализация системного Android Timer. Пробуем запустить и смотрим на результат:

Теперь сделаем немного сложнее — при истечении 5 секунд в таймере будем запускать второе окно приложения. Как создать второе окно и выполнять на него переход мы уже детально разбирали раньше.

Как вы уже поняли, все изменения будут касаться лишь времени таймера:

и описания действий в методе MyTimerTask :

Запускаем и тестируем:

Переход выполнен успешно! Как видите, Android Timer довольно простая и интересная вещь, теоретически в метод TimerTask можно запихнуть что угодно. Поэкспериментируйте! А еще освойте счетчик обратного отсчета CountDownTimer.

Источник

Таймер с ручным запуском

Недавно мне нужно было сделать таймер, запускающий некую задачу, через определенный промежуток времени.

Но отличия от стандартного решения заключались, в следующем:

  • Во-первых, если задача не смогла выполниться, тут же необходимо повторить её. И так, до победного конца. После этого, возвращаемся в штатный режим.
  • Во-вторых, может возникнуть необходимость запустить задачу вручную, не дожидаясь наступления следующего срабатывания таймера.
  • И в-третьих, таймер должен запуститься в том случае, если устройство перезагружено, или была восстановлена связь с интернетом.

Задача была решена следующим образом.

Читайте также:  Прога восстановления удаленных файлов для андроида

Напишем тестовое приложение.Создайте проект, с пустой активностью.

Создадим новый IntentService, с именем UniversalService.

В MainActivity внесем изменения в onCreate:

И добавим метод:

В данном коде (в методе onCreate), мы сохраняем в Общие Настройки, с именем «AlertTest», состояние чекбоксов, и (в методе setServiceAlarm) запускаем таймер с периодичностью 5 секунд, на выполнение службы UniversalService.

Также, мы хотим получать ответ от службы, об успешности выполнения операции.

Для этого добавим в MainActivity класс:

И в конец onCreate добавим:

А в UniversalService поменяем код на следующий:

Как видите, метод verify, эмулирует нашу задачу. В том случае, если она выполнена неуспешно — создается Intent, запускающий MyBroadRec, который опять стартует нашу службу. Настроить мы можем через чекбокс «Очень важная опция». Если мы переведем чекбокс «Автоматический запуск» в неактивное состояние, то работа таймера будет прекращена. Как только задача будет выполнена — переходим в штатный режим.

Но у нас еще осталась задача автозапуска нашего приложения. Для этого создаем класс UniversalReceiver наследующий от BroadcastReceiver:

И в манифесте добавляем следующие строки:

Все, задача решена. Засим позвольте откланяться. Надеюсь кому-то это окажется полезным. Если у кого-то есть замечания и подсказки, с большим удовольствием их выслушаю.

Источник

Создание таймера CountDownTimer в Android на примере

Проблема

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

Решение

Платформа Android поставляется со встроенным классом для создания таймера обратного отсчета CountDownTimers . Он прост в использовании, эффективен и работоспособен (это само собой разумеется!).

Обсуждение

Для создания таймера обратного отсчета выполните следующие действия.

  1. Создайте подкласс Конструктор этого класса принимает два аргумента: CountDownTimer (long millisInFuture, long countDownlnterval) . Первый — это количество миллисекунд с того момента, когда нужно сделать интервал; на данный момент будет вызываться метод подкласса onFinish() . Второй — частота в миллисекундах, определяющая, как часто вы хотите полу­чать уведомления о том, что таймер все еще работает. Это типично для обнов­ления монитора прогресса или другого обмена данными с пользователем. Ваш метод подкласса onTick() будет вызываться каждый раз по истечении данного количества миллисекунд.
  2. Переопределите методы onTick()
  3. Создайте новый экземпляр класса
  4. Вызовите метод start() для вновь созданного экземпляра!

Пример программы для таймера обратного отсчета состоит из компоновки XML (показанной в примере 1) и некоторого кода Java (показанного в примере 2). При запуске он должен выглядеть примерно так, как показано на рис. 1, хотя вре­мя, вероятно, будет иным.

Пример 1. Файл main.xml

Пример 2. Файл Main, java

Рис. 1. Сброс таймера

URL-адрес для загрузки исходного кода

Исходный код этого примера можно посмотреть и скачать на странице Github.

Источник

Оцените статью