Почему он пропускает hander.post()
в первую очередь?
Он не пропускается, он будет выполнен после возврата onResume()
.Все Runnable
s, поставленные в очередь через обработчик, связанный с основным потоком, начинают свое выполнение только после возврата onResume()
.
Почему не работает первый?
Это работает.Вы просто не можете видеть это визуально, потому что два вызова метода textView.setText()
вызываются «почти» одновременно.
Следующая последовательность вызовов происходит в каждом run()
:
textView.setText(time)
, - то же самое
Runnable
отправляется в очередь с handler.postDelayed(this,1000)
.Сразу после этого textView.setText("hell0")
называется
Почему не работает первый?Я ожидаю, что текст будет переходить от «привет» к «чч: мм: сс».
Вы должны реализовать дополнительную логику для переключения между time и "hell0" при каждом выполнении run()
.
Например, создайте логический флаг в Activity и установите либо время, либо "hell0" в зависимости от значения флага (не забудьтеизменить значение флага при каждом выполнении run()
) .
почему это используется в postDelay (this, 100).не должно ли это быть this.run()
?
Нет, this.run()
выполняется синхронно (и немедленно) и имеет тип void .Код не скомпилируется, так как postDelay () ожидает тип Runnable , а не void .