Main Thread와 Background Thread를 사용하는 가장 기본적인 패턴을 구현한다.
Start 버튼을 누르면 Label에 1부터 100까지 표시하려고 한다.
하지만 당연히 짧은 시간에 실행되니 바로 100이 Label에 출력된다.
따라서 스레드의 sleep 메소드를 사용해본다.
Thread 클래스를 제공하고 있지만, 쉽고 안전한 방법이 있기 때문에 가급적 사용하지는 않는 것이 좋다. 그러나 Thread.isMainThread
나 Thread.sleep
은 가끔 사용한다.
Thread.sleep은 전달된 시간동안 잠깐 스레드를 멈춘다.
하지만 예상대로라면 0.1초마다 label이 갱신되어야하지만 그렇지 않고 Label에서 변화가 없다. 그리고 버튼이 눌러도 반응이 없다.
그리고 0.1 * 100인 10초가 지나야 100이 바로 출력된다.
즉, 이 10초동안 메인스레드가 다른 이벤트까지 처리하지 못하게되는 것이다.
이런 상태를 블로킹이라고 한다.
이를 해결하려면 코드를 백그라운드로 이동시켜 메인스레드가 UI를 업데이트할 수 있도록 해주어야 한다.
하지만 이렇게 되면 보라색 오류 메시지가 발생한다.
이게 반복되면 크래시가 발생한다.
UI가 업데이트 되는 코드는 반드시 메인스레드에서 실행해야 되기 때문이다.