티스토리 뷰

Android/Concept

[Android] Thread 제약사항

ch4njun 2019. 8. 19. 12:55
반응형

뭐 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

 

 

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/03   »
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
글 보관함