Я разработал приложение для отображения текста через определенные промежутки времени на экране эмулятора Android. Я использую Handler
класс. Вот фрагмент из моего кода:
handler = new Handler();
Runnable r = new Runnable() {
public void run() {
tv.append("Hello World");
}
};
handler.postDelayed(r, 1000);
Когда я запускаю это приложение, текст отображается только один раз. Почему?
android
multithreading
Rajapandian
источник
источник
Ответы:
Простое исправление к вашему примеру:
Или мы можем использовать нормальный поток, например (с оригинальным Runner):
Вы можете рассматривать ваш работающий объект как команду, которую можно отправить в очередь сообщений для выполнения, а обработчик - как вспомогательный объект, используемый для отправки этой команды.
Более подробная информация здесь http://developer.android.com/reference/android/os/Handler.html
источник
источник
Я думаю, что может улучшить первое решение Alex2k8 для обновления исправить каждую секунду
1. Оригинальный код:
2. Анализ
tv.append("Hello Word")
стоимость составляет T миллисекунд, после отображения время задержки в 500 раз составляет 500 * T миллисекунд.3. Решение
Чтобы избежать этого, просто измените порядок postDelayed (), чтобы избежать задержки:
источник
Для повторения задания вы можете использовать
называть это как
куда
задача является методом, который будет выполнен
по истечении времени до первоначального исполнения
( интервал времени для повторения исполнения)
во-вторых
И вы также можете использовать CountDownTimer, если вы хотите выполнить задачу несколько раз.
И вы также можете сделать это с помощью runnable. создать работоспособный метод, такой как
И назовите это обоими этими способами
ИЛИ
источник
Я считаю, что для этого типичного случая, то есть для запуска чего-либо с фиксированным интервалом,
Timer
более подходящим. Вот простой пример:Использование
Timer
имеет несколько преимуществ:schedule
аргументах функцииmyTimer.cancel()
myTimer.cancel()
перед планированием нового (если myTimer не равен NULL)источник
источник
r
которая еще определена.Если я правильно понимаю документацию метода Handler.post ():
Таким образом, примеры, предоставленные @ alex2k8, хотя и работают правильно, не совпадают. В случае, где
Handler.post()
используется, новые потоки не создаются . Вы просто публикуетеRunnable
в темеHandler
сообщения, которые будут выполнены EDT . После этого EDT только исполняетсяRunnable.run()
, больше ничего.Помните:
Runnable != Thread
.источник
Котлин
Ява
источник
Интересным примером является то, что вы можете постоянно видеть счетчик / секундомер, работающий в отдельном потоке. Также показывает GPS-местоположение. В то время как основной вид деятельности User Interface Thread уже существует.
Выдержка:
Чтобы посмотреть код см. Здесь:
Пример потока, показывающий местоположение GPS и текущее время, работающее вместе с потоком пользовательского интерфейса основной деятельности
источник
теперь в Kotlin вы можете запускать темы следующим образом:
источник
Котлин с сопрограммами
В Kotlin, используя сопрограммы, вы можете сделать следующее:
Попробуйте это здесь !
источник