이 게시물은 다음 링크를 참조하여 학습했습니다.
안드로이드 스레드(Android Thread)
1. 스레드(Thread), 그리고 프로그램(Program)과 프로세스(Process). 스레드(Thread)를 설명하는 이 문장을 읽고 나서, 어떤 용어 또는 개념들이 머리 속에서 확장되나요? 스레드(Thread)라는 단어를 듣는 것
recipes4dev.tistory.com
1. Thread 통신
내가 생각하는 스레드를 다루는 궁극적인 목표는 "스레드 통신"이라고 생각한다.
왜냐하면 스레드를 쓰는 이유는 작업시간이 긴 작업이나, 무한반복 등의 작업을 메인스레드에서 실행할 수 없기 때문이다.
스레드 통신의 워크플로우는 다음과 같다.
이를 위해서는 대표적으로 세 가지 클래스를 알아야하는데, 아래에 그 설명이 있다.
1) Thread Class
Thread 클래스는 스레드 관련 기능을 구현하는 다양한 메서드가 포함되어 있다.
Thread 클래스를 상속받은 CustomThread 클래스를 만들어 Thread 클래스의 void run()를 오버라이드 한 후 run 메서드 안에 스레드가 처리할 작업을 작성한다.
간단한 스레드를 만드는 과정에서는 run() 메서드만을 사용하는 경우가 많다.
run()메서드만을 사용하는데 굳이 Thread 클래스를 상속받을 이유가 있을까?
Thread 클래스의 run() 하나 만을 메서드로 가지는 Runnable Class를 사용하면 된다.
2) Runnable Class
Runnable은 방금 얘기했던 것 처럼 run()메서드 하나만을 포함하고 있다.
스레드를 사용해 많은 개발을 해본 것은 아니지만, Thread의 다른 메서드를 오버라이드 할 것이 아니라면 Runnable을 사용하는 것이 효율적이라 생각된다.
3) Handler Class
통상적인 개념의 Handler는 메세지 수신, 처리를 담당하는데,
안드로이드에서 Handler는 메세지 수신/송신, Runnable 송신이 가능하다.
2. 스레드 통신 예제
예제 코드는 다음과 같다.
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
|
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) { //핸들러 메세지
//작업2
}
} ;
NewRunnable nr = new NewRunnable();
Thread t = new Thread(nr);
t.start(); //스레드 시작
}
class NewRunnable implements Runnable {
@Override
public void run() {
try {
//작업1
} catch (Exception e) {
e.printStackTrace() ;
}
mHandler.sendEmptyMessage(0) ; //핸들러 메세지 송신
}
}
|
cs |
'Legacy' 카테고리의 다른 글
[안드로이드 스튜디오 에러#2] Retrofit, Jaxb, OkHttpClient (0) | 2021.02.05 |
---|---|
[안드로이드 스튜디오 정리#12-2] AsyncTask (0) | 2021.02.04 |
[안드로이드 스튜디오 독학#27] 현재 날씨 어플 (3) | 2021.02.04 |
[안드로이드 스튜디오 에러#1] XmlPullParser (0) | 2021.02.03 |
[안드로이드 스튜디오 정리#13] Network (0) | 2021.02.01 |