1초에 1씩 증가하는 수를 화면에 표시하고자한다.
먼저 아래의 함수를 이용하여 실행시간의 딜레이를 주어야 한다.
Thread.sleep
Thread.sleep는 괄호안의 수 만큼 멈추게 된다. onCreate() 메소드 안에 아래의 코드처럼 작성해보자.
onCreate() 메소드 안의 코드는 모두 메인 스레드에서 동작하기 때문에 Thread.sleep 함수만을 사용하게되면 화면을 그리는 모든 것이 멈추어 아무것도 표시되지 않는다.
참고로 화면을 그리는 모든 것은 메인 스레드에서 실행 되어야한다.
thread(start = true)
따라서Thread.sleep함수를 서브 스레드에 동작하기 위해서 thread(start = true)함수를 사용하여 함수안의 코드가 모두 서브 스레드에서 작동하게 한다. 하지만 아래 처럼 구성하면 표시는 되지만 앱이 강제로 종료 되어버린다.
이렇게 하게되면 1초간 앱이 동작하다가 앱이 죽는데 그 이유가 앞서 말했듯이 화면을 그리는 모든 것은 메인 스레드에서 실행 되어야하는데 서브스레드에서 실행 되어서이다.
runOnUiThread
이 문제를 해결하기위해선 runOnUiThread 코드를 추가하여야 한다.
runOnUiThread 코드 블록 안의 코드는 모두 메인 스레드에서 실행 하게 된다.
이렇게 작성하면 1초에 1씩 증가하여 TextView의 text 값을 변경하게 된다.