[много глупостей о вызове sleep()
в потоке пользовательского интерфейса].Если я правильно понял, вы имеете в виду что-то вроде:
//...inside onTick()
try {
tv2.setText("almost waking up"); // first setText()
Thread.sleep(4000);
tv2.setText("waking up"); // second seText()
}
Если вы заставите ваш основной поток спать, он просто перестанет обрабатывать что-либо: текущий метод, цикл потока и очередь сообщений.После пробуждения он завершит выполнение метода со вторым setText()
, переопределяющим первый, и затем продолжит цикл потока и обновит пользовательский интерфейс, показывая только второй текст.
Не requestLayout()
* * * * * * forceLayout()
не может на самом деле немедленно обновить пользовательский интерфейс, они оба планируют запрос макета в цикле потока.Я не уверен, но я думаю, что разница между ними заключается в том, что requestLayout()
вызывается представлением, которое изменило свой размер / позицию в его родительском , а forceLayout()
вызывается ViewGroup
который нуждается в его дочерних элементах для перекомпоновки.
Поэтому [больше глупостей о вызове sleep()
в потоке пользовательского интерфейса].Для таких вещей вызов postDelayed()
в обработчике основного потока, вероятно, является лучшим решением, если вы не хотите связываться с многопоточностью.