Стандартный Java-способ использования таймеров через java.util.Timer и java.util.TimerTask прекрасно работает в Android, но вы должны знать, что этот метод создает новый поток.
Вы можете рассмотреть возможность использования очень удобного класса Handler (android.os.Handler) и отправлять сообщения обработчику через sendMessageAtTime(android.os.Message, long)
или sendMessageDelayed(android.os.Message, long)
. Получив сообщение, вы можете запускать нужные задачи. Второй вариант - создать объект Runnable и запланировать его с помощью функций обработчика postAtTime(java.lang.Runnable, long)
или postDelayed(java.lang.Runnable, long)
.
да, можно использовать таймер Java , но так как вопрос требует лучшего способа (для мобильных устройств). Что объясняется здесь .
Ради StackOverflow:
Так как Timer создает новый поток, его можно считать тяжелым,
если все, что вам нужно, - это перезвонить во время выполнения действия, то обработчик можно использовать вместе с
Runnable :
или сообщение
В дополнение к этому, этот подход можно использовать, если вы хотите запустить фрагмент кода в потоке пользовательского интерфейса из другого потока.
если вам нужно перезвонить, даже если ваша активность не работает, вы можете использовать AlarmManager
источник
Как я видел, java.util.Timer наиболее часто используется для реализации таймера.
Для повторяющейся задачи:
Для одного запуска задачи:
задача - метод, который должен быть выполнен
после времени начального выполнения
( интервал времени для повторения выполнения)
источник
task
может быть экземпляром вашего класса, который наследуется от java.util.TimerTask и переопределяетvoid run()
.Я надеюсь, что это полезно и может потребовать меньше усилий для реализации, класс Android CountDownTimer
например
источник
Наверное
Timerconcept
или
Способ 2 ::
Запрограммируйте таймер
Добавьте новую переменную int с именем time. Установите его в 0. Добавьте следующий код в функцию onCreate в MainActivity.java.
Зайдите в метод run и добавьте следующий код.
источник
Это ситуативный.
Документация по Android предполагает, что вы должны использовать AlarmManager для регистрации намерения, которое сработает в указанное время, если ваше приложение может не работать.
В противном случае вам следует использовать Handler.
источник
Наш 1-й класс
Наш второй класс
источник
Я новичок в Android, но вот класс таймера, который я создал на основе ответов выше. Это работает для моего приложения, но я приветствую любые предложения.
Пример использования:
источник
Я использую обработчик и runnable для создания таймера. Я оборачиваю это в абстрактный класс. Просто извлеките / внедрите его, и все готово:
Обратите внимание, что
handler.postDelayed
вызывается перед кодом, который должен быть выполнен - это сделает таймер более закрытым, как и ожидалось. Однако в тех случаях, когда таймер часто запускается, а задача (onTimer()
) длинная, возможны совпадения. Если вы хотите начать считатьintervalMS
после выполнения задачи, переместитеonTimer()
вызов на строку выше.источник
Я считаю, что способ сделать это на Android является то, что вам нужен фоновый сервис для запуска. В этом фоновом приложении создайте таймер. Когда таймер «тикает» (установите интервал времени, в течение которого вы хотите ждать), запустите свою деятельность, которую вы хотите начать.
http://developer.android.com/guide/topics/fundamentals.html (<- эта статья объясняет взаимосвязь между действиями, услугами, намерениями и другими основными принципами разработки Android)
источник
Раньше я использовал (
Timer
,TimerTask
), а такжеHandler
периодически запускать (трудоемкие) задачи. Теперь я полностью перешел на RxJava. RxJava предоставляетObservable.timer
более простой, менее подверженный ошибкам, беспроблемный в использовании.источник
Для временной операции вы должны использовать Handler .
Если вам нужно запустить фоновый сервис, AlarmManager - это то, что вам нужно.
источник
этот пример запуска таймера unitl уничтожен в Kotlin
Отмените задание таймера в onDestroy ()
источник