Может кто-нибудь привести простой пример обновления текстового поля каждую секунду или около того?
Я хочу сделать летающий шар и мне нужно вычислять / обновлять координаты шара каждую секунду, поэтому мне нужен какой-то таймер.
Я ничего не получаю отсюда .
Ответы:
хорошо, так как это еще не выяснено, есть 3 простых способа справиться с этим. Ниже приведен пример, показывающий все 3, а внизу пример, показывающий только тот метод, который я считаю предпочтительным. Также не забудьте очистить свои задачи в onPause, сохраняя состояние при необходимости.
главное помнить, что пользовательский интерфейс может быть изменен только из основного потока пользовательского интерфейса, поэтому используйте обработчик или activity.runOnUIThread (Runnable r);
Вот то, что я считаю предпочтительным методом.
источник
Это просто! Вы создаете новый таймер.
Затем вы расширяете задачу таймера
А затем добавить новую задачу в таймер с некоторым интервалом обновления
Отказ от ответственности: это не идеальное решение. Это решение с использованием класса Timer (по запросу OP). В Android SDK рекомендуется использовать класс Handler (в принятом ответе есть пример).
источник
Если вам также необходимо запустить код в потоке пользовательского интерфейса (а не в потоке таймера), загляните в блог: http://steve.odyfamily.com/?p=12
источник
Если вы просто хотите запланировать обратный отсчет до определенного времени в будущем с регулярными уведомлениями через определенные промежутки времени, вы можете использовать класс CountDownTimer, который доступен начиная с уровня API 1.
источник
SS:MiMi
? СпасибоЭто простой код для таймера:
источник
Я думаю, что вы можете сделать это в Rx, например:
И отмените это как:
Rx Timer http://reactivex.io/documentation/operators/timer.html
источник
Поскольку этот вопрос по-прежнему привлекает множество пользователей из поиска в Google (о таймере Android), я хотел бы вставить свои две монеты.
Прежде всего, класс Timer будет устаревшим в Java 9 (прочитайте принятый ответ) .
Официальный предложил способ заключается в использовании ScheduledThreadPoolExecutor , который является более эффективным и показывает , что богатые могут дополнительно команды расписания для запуска после данной задержки, или периодически выполнять. Кроме того, это дает дополнительную гибкость и возможности ThreadPoolExecutor.
Вот пример использования простых функций.
Создать службу исполнителя:
Просто график вы работаете:
Теперь вы можете использовать,
future
чтобы отменить задачу или проверить, если это сделано, например:Надеюсь, вы найдете это полезным для создания задач в Android.
Полный пример:
источник
Я удивлен, что нет ответа, который упомянул бы решение с RxJava2 . Это действительно просто и предоставляет простой способ настройки таймера в Android.
Сначала вам нужно настроить зависимость от Gradle, если вы еще этого не сделали:
(заменить
x
иy
с текущим номером версии )Так как у нас есть простая, неповторяющаяся задача , мы можем использовать
Completable
объект:Для ПОВТОРНОЙ ЗАДАЧИ вы можете использовать
Observable
аналогичным образом:Schedulers.computation()
гарантирует, что наш таймер работает в фоновом потоке и.observeOn(AndroidSchedulers.mainThread())
означает, что код, который мы запускаем после завершения таймера, будет выполнен в основном потоке.Чтобы избежать нежелательных утечек памяти, вы должны отменить подписку, когда действие / фрагмент уничтожен.
источник
Subscription
возвращенный.subscribe()
метод в переменной и затем вызовите,subscription.unsubscribe()
когда вы хотите остановить таймер.Он более простое решение, прекрасно работает в моем приложении.
источник
Вы хотите, чтобы обновления вашего пользовательского интерфейса происходили в уже существующем потоке пользовательского интерфейса.
Лучший способ - использовать Обработчик, который использует postDelayed для запуска Runnable после задержки (каждый запуск планирует следующий); очистить обратный вызов с помощью removeCallbacks.
Вы уже ищете правильное место, поэтому посмотрите на него еще раз, возможно, объясните, почему этот пример кода не тот, который вам нужен. (См. Также ту же статью в разделе Обновление интерфейса от таймера ).
источник
Вот простой надежный способ ...
Поместите следующий код в свою активность, и метод tick () будет вызываться каждую секунду в потоке пользовательского интерфейса, пока ваша активность находится в состоянии «возобновлено». Конечно, вы можете изменить метод tick (), чтобы делать то, что вы хотите, или вызываться более или менее часто.
Для тех, кто заинтересован, код "_h0 = _handler" необходим, чтобы избежать одновременного запуска двух таймеров, если ваша деятельность была приостановлена и возобновлена в течение периода времени.
источник
_h0
подход, а неremoveCallbacks
вonPause
, как все остальные?Вы также можете использовать аниматор для этого:
источник
Вам необходимо создать поток для обработки цикла обновления и использовать его для обновления текстовой области. Сложность заключается в том, что только основной поток может фактически изменять пользовательский интерфейс, поэтому поток цикла обновления должен сигнализировать основному потоку о необходимости обновления. Это делается с помощью обработчика.
Проверьте эту ссылку: http://developer.android.com/guide/topics/ui/dialogs.html# Нажмите на раздел под названием «Пример ProgressDialog со вторым потоком». Это пример того, что вам нужно сделать, за исключением диалогового окна прогресса вместо текстового поля.
источник
источник
Если кому-то интересно, я начал играть с созданием стандартного объекта для запуска в потоке пользовательского интерфейса. Кажется, работает нормально. Комментарии приветствуются. Я хотел бы, чтобы это было доступно на дизайнере макетов в качестве компонента для перетаскивания на Activity. Не могу поверить, что такого не существует.
В действии у меня есть это onStart:
источник
.xml
источник
Если у вас уже есть дельта время.
источник
Я удалил абстрактный таймер и сделал его отдельным классом:
И извлечь основное действие из
Timer
класса какИ я использовал это так:
Я надеюсь, что это поможет 😊👌
источник
Я использую этот способ:
тогда ниже onCreate
это простой способ решить эту проблему.
источник
Для тех, кто не может положиться на Хронометр , я сделал полезный класс из одного из предложений:
использовать .. просто сделайте:
.....
источник