안드로이드 With Java #13 Thread
Thread는 간단히 설명하면 작업 흐름을 뜻한다. 프로그램이 시작한다는 것은 Thread가 시작하는 것이고, 프로그램이 종료되는 것은 Thread가 종료되는 것임.
Thread가 꼭 하나일 필요는 없으며, 메인 Thread를 진행하는 도중에 다른 Thread를 열어서 작업할 수 있음.
쓰레드는 동시적으로 진행될 수 있음.
프로그램의 시작과 끝을 담당하는 Thread를 안드로이드에서는 Main Thread 또는 UI Thread라고 한다. Main Thread 또는 UI Thread에서만 사용자의 Input을 받을 수 있다.
또한 Main Thread는 잠깐 멈춰두거나 할 수 없다. 그런 일이 발생하면 Exception이 발생하며 프로그램이 종료될 수 있다.
Runnable
따로 구성하기Runnable
인스턴스를 만든다.Thread
인스턴스를 만들고 Argument로 이전에 만든 Runnable
인스턴스를 넣는다.Runnable
바로 넣기Runnable
을 따로 생성하지 않고 바로 Argument에 넣는 방식인 위와 같이 짧은 축약형으로 만들어도 동일하다.
Runnable
객체를 참조하여 수행할 추가적인 작업을 할 필요가 없을 때에는 아래의 방법으로 만드는 것이 효율적이다.
위와 같이 start()
메소드를 수행해야 한다. 제대로 실행되는지 한번 앱을 실행해보자.
Log가 잘 찍힌 것을 볼 수 있다.
먼저 한가지 주의해야 할 것은 메인쓰레드가 아닌 쓰레드에서 UI작업을 하면 안된다는 것이다. 한번 메인 쓰레드가 아닌데 Toast
를 만드는 작업을 해보자.
Toast는 안드로이드 안내메세지 같은 것이다.
이렇게 만들어보았다.
매개변수는 차례로 context
, text
, duration
이다.
MainActivity.this
에 "토스트 메세지 테스트"
글자를 Toast.LENGTH_LONG
(길게) 띄우라는 의미이다.
Can't toast on a thread that has not called Looper.prepare()
위와 같이 에러가 뜬다.
UI 쓰레드를 만들고 다시 시도해보자.
UI 쓰레드를 만드는 방법은 간단하다. runOnUiThread
메소드를 이용하면 된다.
드디어 Toast가 제대로 뜨는 것을 알 수 있다.