- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[안드로이드] 안드로이드의 스레드(Thread) - A. 스레드 본문
스레드(Thread)
차례
A. 스레드
B. 핸들러
C. 루퍼
A. 스레드
스레드는 작업을 독립적으로 실행시키는 능력입니다. 여러 독립적인 작업을 동시에 실행하는 것은 멀티 스레드라고 부릅니다. 이런 멀티 스레드를 사용할 때에는 스레드 간의 동기화를 고려해야 합니다. 특히나 안드로이드는 자바 기반으로 만들어졌기 때문에 멀티 스레드를 지원합니다.
스레드는 이렇게 독립적으로 실행시키는 능력이라서 조금이라도 복잡해지는 어플리케이션에서 매우 유용하게 쓰입니다. 특히 한 어플리케이션에서 두 가지 작업을 해야 할 때는 필수이죠. 또한 스레드를 이용해서 시간을 체크할 수도 있고 시간 지연을 줘서 타이밍 좋게 여러가지를 다룰 수 있습니다.
예로 들면 어떤 작업이 0.5초만 늦춰지면 톱니바퀴가 딱 맞아 떨어질텐데 그렇게 안된다면,
스레드를 이용해 0.5초를 늦출 수 있으니까요.
스레드의 생성
- 디폴트 생성자로 Thread객체 생성
생성된 Thread 객체는 그 자체가 독립적으로 실행되는 흐름이 된다. 스레드는 메인 스레드와 별도의 CPU할당을 받게 되며 스레드를 쓰게 될 경우는 반드시 run 메서드를 작성해야 한다.
- Runnable 인터페이스 구현 객체 생성 후에 Thread의 생성자로 전달
자바는 다중 상속이 되지 않기 때문에 다른 클래스를 상속하고 있을 경우 Runnable 인터페이스를 상속받아서 run 메서드를 작성한다.
디폴트 생성자 예제
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.thread_threadtest);
mMainText = (TextView)findViewById(R.id.mainvalue);
mBackText = (TextView)findViewById(R.id.backvalue);
Button btn = (Button)findViewById(R.id.increase);
btn.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
mMainValue++;
mMainText.setText("MainValue : " + mMainValue);
mBackText.setText("BackValue : " + mBackValue);
}
});
// 스레드 객체를 통해서 디폴트 생성자로 생성했습니다.
// setDeamon으로 메인 스레드와 종료 동기화를 이룹니다. 종료 동기화는
// 메인 스레드가 죽게 될 경우, 서브 스레드들도 같이 죽게 하는 것입니다. 안그러면 서브는 메인이 종료되도
// 계속해서 수행하고 있을테니까요.
// 그 이후 start메서드를 이용해서 스레드를 시작 시킨 것이죠.
// start를 이용하면 자동으로 run도 실행되게 되어 있습니다.
BackThread thread = new BackThread();
thread.setDaemon(true);
thread.start();
}
class BackThread extends Thread {
public void run() {
while (true) {
mBackValue++;
//mBackText.setText("BackValue : " + mBackValue);
try { Thread.sleep(1000); } catch (InterruptedException e) {;}
}
}
}
Runnable 인터페이스 구현 예제
...
...
// 선언 전의 내용은 같으니 선언만 보도록 할께요.
// 스레드 객체에 인자로 Runnable을 넣어주는게 보입니다.
// setDeamon과 start도 같습니다.
// 스레드를 구현하는 클래스가 Runnable 인터페이스를 구현한다는 것이 다르지요.
// 단, 두 줄의 차이입니다.
BackRunnable runnable = new BackRunnable();
Thread thread = new Thread(runnable);
thread.setDaemon(true);
thread.start();
}
class BackRunnable implements Runnable {
public void run() {
while (true) {
mBackValue++;
try { Thread.sleep(1000); } catch (InterruptedException e) {;}
}
}
}
[출처] 안드로이드의 스레드(Thread) - A. 스레드|작성자 녹차
'★─Programing > ☆─Android' 카테고리의 다른 글
[안드로이드] 안드로이드의 스레드(Thread) - C. 루퍼(Looper) (0) | 2011.11.03 |
---|---|
[안드로이드] 안드로이드의 스레드(Thread) - B. 핸들러 (0) | 2011.11.03 |
[안드로이드] 안드로이드 핵심, 액티비티(Activity) (0) | 2011.11.03 |
[안드로이드] 안드로이드 프로젝트 폴더와 파일 설명 (0) | 2011.07.22 |
[안드로이드] XML로 메뉴만들기 - 메뉴항목을 보이고 안보이게 하기 (0) | 2011.07.20 |