스레드는 동시작업을 할려면 필요한 하나의 작업단위라고 볼 수 있다.
예를 들어, 음악을 다운로드 받고 이를 재생할 수 있는 어플리케이션이 하나 있습니다. 정상적인 어플이라면 음악을 다운로드 받는 동안에도 기존에 있는 음악을 재생 할 수 있다. 하지만 어떤 음악을 전부 다운 받을때까지 음악 재생이고 검색이고 뭐고 화면이 그냥 우뚝 서있게 된다면 굉장히 불편한 어플이 된다.
이는 음악 어플 내에 기능을 수행할 수 있는 동작 흐름이 '하나뿐' 이기 때문이다.
스레드는 '여러 갈래의 작업 흐름'을 만듦으로써 이러한 문제를 말끔히 해결 해 줄 수 있다.
" 하나의 프로그램 내에서
여러 동작을 동시에 수행한다 "
이를 멀티 스레딩(Multi Threading) 이라고 합니다. 이미 자바나 다른 언어에서도 스레드라는 개념이 있지만 안드로이드에서의 스레드는 주로 서버와의 통신에서 사용
스레드는 하나의 프로세스에서 동작하기 위해 '프로세스의 자원을 공유' 하게 된다. 다시 말해, 하나의 프로그램 내에서 정의하고 구현 해 놓은 '변수'나 '메소드'등을 공유하게 된다. 자원을 공유한다는 개념이 상당히 중요한데, 그림으로 설명하자면 다음과 같다.
안드로이드에서 스레드를 구현하는 방법은 크게 두가지로 구현 할 수 있다.
extends Thread
Thread 를 상속 받는 방법이든 Runnable 을 구현 하는 방법이든 주목해야할 메소드는 run() 과
start() 이다.
Thread 클래스를 상속 받은 후,**run() 메소드**를 Override 하여 스레드가 무엇을 할지를 정해 줍니다. 이후에 메인 액티비티 내에서 스레드를 생성해주고 해당 스레드를**start()**시켜 줌으로써 스레드를 동작 시킬 수 있습니다.
implement Runnable
Runnable 인터페이스를 구현하는 방법 또한 run() 메소드로 스레드 동작을 구현하고 start() 로 스레드를 실행 시키는 주된 흐름은 같지만선언 하는 방식이 약간 달라진다.Thread 동작 예제
Thread 는 Activity 의 생성과 함께 실행이 되며 1초당 한번씩 덧셈 연산을 진행 하고 이를 Thread Result 로 보여준다.
버튼을 클릭 할 때마다 값이 1씩 증가하고 이를 Main Result 로 보여준다.
로직을 통해 사용자에게 보여지는 버튼 클릭의 행동과는 별개로 Activity 가 실행 되자마자 background 에서 묵묵히 계산을 수행중인 Thread 의 결과 값을 관찰 할 수 있습니다.