Thread.sleep()은 blocking 방식이기 때문에 UI를 얼게 만듭니다. 따라서 UI가 원하는대로 바로 업데이트 되지 않을 수가 있습니다. 따라서 모바일에서는 Thread.sleep은 가능한한 사용하지 말아야 합니다.
runUniThread의 소스코드를 보면 아래와 같습니다.
public final void runOnUiThread(Runnable action) {
if (Thread.currentThread() != mUiThread) {
mHandler.post(action);
} else {
action.run();
}
}
즉, 메인쓰레드가 아닌 경우는 handle.post를 이용해 스케쥴링 하므로 바로 실행되지 않을 수 있습니다. 따라서 님이 작성한 코드block이 실행될 때 Thread.sleep이 같이 실행되면서 해당 쓰레드 안에 코드가 block이 되므로 UI 업데이트가 보장되지 않을 수도 있을 것으로 보입니다. 즉, UiThread에 화면을 업데이트 하지 말라는 신호같을 걸로 간주될 수 있을 것 같습니다.
보통은 Handler.postDelayed나 자바면 RxJava, 코틀린은 Coroutine을 사용해서 쓰레드 처리를 많이 합니다. 기본적인 쓰레드 사용법을 공부하시고 코틀린을 사용하시니까 Coroutine을 사용하시면 적합한 선택이 될 것 같습니다.