티스토리 뷰
뭐 Thread가 무엇인지 Process와 Thread에 대한개념적인 내용은 건너뛰고 안드로이드에서 Thread를 사용하는 포인트와 사용할 때 자주 사용되는 형태에 대해서만 설명하겠다.
Thread의 기본적인 사용법은 JAVA와 동일하다. ( Runnable 까지도 ... )
Thread thread = new Thread() {
public void run() {
// ...
}
}
thread.start();
Thread t = new Worker();
t.start();
class Worker extends Thread {
public void run() {
// ...
}
}
new Thread() {
public void run() {
// ...
}
}.start();
Thread t = new Thread(new Worker());
t.start();
class Worker implements Runnable [
public void run() {
// ...
}
}
Thread t = new Thread(new Runnable() {
public void run() {
// ...
}
});
t.start();
new Thread(new Runnable() {
public void run() {
// ...
}
}).start();
아래 내용은 Main Thread와 Sub Thread에서의 제약사항이다.
스레드간 동기화를 위해 JAVA와 마찬가지로 synchronized 구문을 사용한다.
Main Thread
안드로이드에서 Application이 실행될 때 기본적으로 생성되는 Thread를 말한다.
Main Thread는 각종 생명주기 함수들을 처리하고 화면에 그림을 그리는(UI) 등의 역할을 한다.
- Main Thread를 보고 UI Thread라고 부르기도한다.
생성된 Sub Thread에서 새로운 Thread를 생성해도 그 생성된 Thread는 Main Thread가 관리한다.
1. ANR
오래걸리는 작업은 Main Thread에서 할 수 없다.
( ANR 이라는 제약사항이 걸려있다. )
→ 일정 시간 Main Thread가 응답하지 않을 때 프로세스가 중지된다.
* 심지어는 오래걸릴법한 객체는 사용자체가 불가능하다. ( Device I/O, Network )
이러한 위반을 Strict Mode위반이라고 한다.
결론 : 이런 오래걸리는 작업은 Sub Thread를 생성한 후 그 Thread에서 처리하게 된다.
2.
Sub Thread에서는 화면(Activity)를 그리는 작업을 할 수 없다.
( 작업을 할 수 있다고 가정했을 때 여러 Sub Thread에서 그릴 경우 동기화의 문제가 발생할 수 있다. )
→ Sub Thread에서 GUI를 그리려고 했을 때 CalledFromWrongThreadException 발생.
* 그러나 아예 방법이 없는 것은 아니다.
Sub Thread에서 UI를 제어하기 위해서 Handler라는 개념을 사용하게 된다.
Handler에게 데이터를 주고 Handler가 이후를 처리하게 된다.
ch4njun.tistory.com/90?category=720630
[Android] Thread와 Handler ( Feat. Sub Thread에서의 UI 설정 )
Sub Thread에서 UI수정이 필요할 경우에 Sub Thread에서 직접 수정할 수 없다. 왜냐하면 여러 Sub Thread가 존재할 때 동시에 접근할 수 있는 동기화문제가 존재하기 때문이다. Q. 그러면 Sub Thread에서 처리
ch4njun.tistory.com
'Android > Concept' 카테고리의 다른 글
[Android] Thread Helper Class → AsyncTask ★★★ (0) | 2019.08.19 |
---|---|
[Android] Thread와 Handler ( Feat. Sub Thread에서의 UI 설정 ) (0) | 2019.08.19 |
[Android] 권한 부여하기 (0) | 2019.08.04 |
[Android] 브로드캐스트 리시버 ( Feat. 별쾅쾅 ) (0) | 2019.08.01 |
[Android] 액티비티의 생명주기 (0) | 2019.07.29 |