본문 바로가기
[Public] 프로그래밍/Android

[Android] 안드로이드의 스레드 #1 (간단하게 스레드 만들기)

by 차출발 2010. 8. 18.
반응형
이번 시간에는 안드로이드의 스레드에 대해서 알아보자 !

예전에는 음악을 듣다 문자메시지가 오면

음악을 끄고 메시지를 확인후 메시지를 보내고 다시 음악을 틀어야 만 했다.

하지만 요즘 나오는 핸드폰은 음악을 들으면서 메시지를 작성하는 핸드폰이다.




이를 가능케 해주는 여러 작업을 동시에 실행하는

스레드 안드로이드에서 안집고 넘어 갈 수가 없다.

안드로이드의 스레드 기능은 주로 자바에 의해 지원되는데

먼저 자바의 스레드를 읽어 보기 바란다.



간단하게 스레드를 사용하려고 합니다. 어떻게 스레드를 사용하죠 ?

자바에서는 스레드를 생성하는 두 가지 방법을 지원한다.

Thread()
Thread(Runnable runnable)


첫번째 디폴트 생성자는

그자체가 독립적으로 실행되는 실행의 흐름이 된다.

스레드는 고유의 스택을 가지면서 메인 스레드와 별로도 CPU시간을 할당받는다.

1. 먼저 클래스를 만들고

2. 스레드 클래스를 상속 도록 설정한다.

3. run()함수를 작성한다.

run() 함수 안에 작성하는 run함수가 스레드의 진입점이며메인 이다.
그렇다 클래스를 만들때 run 함수가 있어야 한다.
이 run 함수 안의 부분이 지속적으로 돌고 있는 것이다.

4. 스레드를 시간간격을 두고 동작하기 위해서는 sleep 함수를 이용한다.

5. 클래스가 완성되면은 스레드를 작동하기 위해 .start() 함수를 사용하여 스레드를 작동시킨다.



스레드를 만들 때 주의할 점은 없나요 ?

먼저 스레드를 돌리면서 종료시점을 제대로 해야한다는 것이다.

프로그램이 종료를 해도 스레드는 계속 돌기 때문에 꼭 종료를 설정 해줘야한다.

그리고 스레드를 2개 이상 사용도 하게될 것인데 중요한 점은

이 두개의 스레드가 하나의 같은 영역의 데이터를 참조할 때의 문제점이다.

충돌이 일어 날 수 있기 때문이다.

이번 시간은 간단한 스레드 돌리는 방법에 대한 설명이기 때문에 

추후 설명하도록 하겠다.



말로만 하면 이해 하기 힘들어요. 예제로 표현해주세요 ~~

간단하게 디폴트 스레드의 사용을 예를 보이겠다.

지속적인 숫자 세기를 스레드로 돌리고

이 스레드가 지속적으로 돌아가는가를 확인하는 안드로이드 프로그램이다.


1. 먼저 스레드를 돌리기 위한 클래스를 하나 생성한다.

   


클래스 이름은 Clock이라 하였다. 
스레드를 사용하기 위하여 Thread 클래스를 상속 받는다.
기본적인 카운터 기능만 동작 시키기 위하여 아무것도 넣지 않았다.

m_nClockCount 는 안드로이드의 한 Activity의 변수이다.
(외부에서 불러오면 생성자 등등 만들기 귀찮기 때문에 그냥 Activity 내부에서 사용하는 클래스로 하였다.)

실질적으로 스레드가 돌아가는 부분을 구현하기 위하여  run 함수를 만들어 준다.
동작은 그냥 m_nClockCount++ 이다. (단지 증가만 하는 기능만 돌리는 것이다.)

이 동작을 제대로 돌아가는지 확인하기 위하여 일정 시간을 주어 스레드가 진행되도록 하였다.
그래서 sleep 함수를 이용하여 주기를 주고 카운터값을 올린다.



2. 레이아웃을 설정해준다.

간단하게 레이아웃을 만들어 주었다.
 TextView 1개 (스레드 구분위한 스레드 안돌린 뷰)
 TextView 1개 (스레드 구분위한 스레드 돌고 있는 뷰)
  Button 1개 (스레드 체크를 위한 버튼)



3. 안드로이드에 위에서 만들었던 스레드를 불러와서 돌린다.

 


안드로이드 위젯을 사용하기 위한 변수를 생성하고 연결 시켯다 <findViewById>

이제 위에서 만들었던 Clock 스레드를 생성하고 스레드를 시작시켰다. < .start() >

여기서 프로그램 종료가 없어서 프로그램이 죽어도 스레드가 계속 돌기 때문에 
데몬스레드로 돌리도록 설정하여 프로그램이 죽으면 스레드 도 죽게 설정했다. < .setDaemon(true) >

자 이제 스레드가 뱅뱅 돌고 있다.
돌고 있는지 확인할 길이 없다.
그래서 확인하기 위해 만든 버튼을 클릭이벤트로 만든다.

클릭시 !
스레드가돌고 있는 카운터 (자동으로 1초마다 증가하고 있음)
버튼 클릭으로 진행되는 카운터 (버튼 클릭을 누늘때 1개식 증가하고 있음)

하고 보여주기 위한 TextView  2개에 각각 나타낸다.

그럼 완성~~



완성된 스레드 결과를 보여주세요 ~~

결과이다. 1초에 한번식 8번 클릭했더니 똑같이 나왔다.

한동한 클릭을 안하고 있다가 한번 다시 클릭 해보니

다시 클릭해보니 한동한 기다렸던 시간 차이가 남을 알 수 있었다.

그렇다 내부적으로 Clock의 카운터는 계속 증가하고 있는것이다.

Clock은 계속 돌고 있음을 확인 할 수 있었다.




스레드를 만드는 법 1편
간단하게 스레드를 만드는 방법이 었습니다.



도움이 되셨다면 리플 하나 남겨주세요
큰 힘이 됩니다 ^^