Делать через определенное время, Android Runnable

У меня есть приложение с классом, реализующим Runnable. Где запускается поток и переопределяется метод run(). Это запускает мою графику.

1-й вопрос: как часто вызывается run()? я не установил время для этого, так что это должно быть значение по умолчанию?

2-й вопрос: я хочу, чтобы что-то было сделано через определенное время (2 минуты, 5 минут, 10 минут) и т. д. Как лучше всего это сделать, я думал об использовании int в качестве счетчика и однажды он достигает определенного значения, делает то, что я хочу.


person Fredkr    schedule 01.11.2012    source источник


Ответы (4)


1-й вопрос: как часто вызывается функция run()? я не установил для этого время, так что это должно быть значение по умолчанию?

Метод run() в вашем потоке вызывается, когда вы его вызываете, например. yourThread.start();

2-й вопрос: я хочу, чтобы что-то было сделано через определенное время (2 минуты, 5 минут, 10 минут) и т. д. Как лучше всего это сделать, я думал об использовании int в качестве счетчик и как только он достигает определенного значения, делает то, что я хочу.

Есть варианты. Либо вы можете вызвать метод Thread.sleep() (NB: никогда не делайте этого в потоке пользовательского интерфейса).

Или вы можете сделать это так, как вы описали выше. Таким образом, в вашем методе run() у вас будет цикл while() и проверка на каждой итерации, если разница между lastUpdate и текущим временем в миллисекундах больше, чем требуемый период, например. 2 мин, 5 мин или 10 мин.

Надеюсь, это поможет.

person Luke Taylor    schedule 01.11.2012


1-й вопрос: как часто вызывается run()?

Вы можете узнать это сами, поместив это в начало вашего Runnable:

Log.v("Running Runnable", System.currentTimeMillis() + ""); 

2-й вопрос: я хочу, чтобы что-то было сделано через определенное время (2 минуты, 5 минут, 10 минут) и т. д.

Расширьте HandlerThread (он инициализирует Looper для вас!), добавьте Обработчик в качестве переменной класса и используйте postDelayed() или postAtTime().

person Sam    schedule 01.11.2012

Точное время между вызовами run() зависит от процессора. Время между каждым вызовом — это то, что действительно видно с точностью до наносекунды. Если вы пытаетесь создать таймер, я бы рекомендовал использовать System.currentTimeMillis(), вызывая его в методе run(), и как только разница больше или равна 1000 миллисекундам, фактический таймер уменьшается на единицу. Это будет отслеживать секунды, и вы можете использовать его в качестве базы для минут и генерировать другие события в определенное время.

person Cogentleman    schedule 01.11.2012