Почему run () вызывается только один раз?

Рассмотрим этот класс, AnimationThread :

 class AnimationThread implements Runnable { public void pause() { doAnimation = false; } public void doStart(){ doAnimation = true; } @Override public void run() { // TODO Auto-generated method stub if (doAnimation) { //my code } try { Thread.sleep(500); } catch (InterruptedException e) { } } } 

Теперь я начинаю эту тему в onCreate of activity (просто показывая грубый код):

 AnimationThread animRunnable = new AnimationThread(); animationThread = new Thread(animRunnable); animationThread.start(); 

Но run() вызывается только один раз (я проследил журнал, чтобы подтвердить это). Я просто хочу знать, что, когда я начал тему, почему run() не получает вызов повторно с 500 sleep. Он называется только один раз.

Так и должно быть.

Поток запускается путем выполнения его метода запуска (только один раз). После этого считается выполненным / мертвым / законченным / завершенным.

Если вы хотите выполнить цикл, вы должны сделать это самостоятельно (внутри метода run) или использовать некоторый ExecutorService для повторного вызова Runnable.

Конечно, метод run() будет выполнен один раз. Если вы хотите повторить утверждения внутри метода run вам нужно использовать цикл. Взгляните на TimerTask – выполнит задание в указанное время или несколько раз.

РЕДАКТИРОВАТЬ:

  1. Android – Управление задачей с помощью Timer и TimerTask?
  2. Расписание задач таймера

run() – это метод, который выполняется только один раз любым Thread . Потому что после завершения run method поток dead or completed .
Таким образом, для одного запуска потока выполняется только одно. Если вы не хотите убивать поток, вы должны убедиться, что запустите завершение …

Intereting Posts
Как ускорить время распаковки в Java / Android? Как программно определить, подключено ли устройство Bluetooth? (Android 2.2) Android card.io sdk, показывающий это устройство, не может использовать камеру для считывания номеров карт Как написать драйверы для Android? Как перехватить наблюдаемый объект и изменить его в RxJava, прежде чем вернуться к подписчику? Можно ли изменить владельца аккаунта на консоли разработчика Google Play? Пользовательский шрифт дает неправильный символ для определенных комбинаций букв в Android Android: java.net.DatagramSocket.bind: Недопустимое исключение аргумента Перемещать текстовое представление только при открытии виртуальной клавиатуры на Android Использование XMPP для push-уведомлений пользователей на Android – любой способ настроить их таким образом, чтобы они не переходили на Google Talk и т. Д. Изменить кнопку андроида: фон для разных доступных Тревоги Alarmmanager.setRepeating Сразу Захват «Enter» с помощью цифрового ввода в Android / Cordova / Knockout : CheckDebugManifest FAILED => файл, указанный для свойства 'manifest', не существует Стратегия загрузки асинхронных изображений ListView