안드로이드 스레드 :: 안드로이드 설치 및 개발[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

안드로이드 설치 및 개발
[1]
등록일:2020-01-21 17:44:25 (0%)
작성자:
제목:안드로이드 스레드

학습 목표.

UI, 바인더, 백그라운드 스레드의 유사점과 차이점

리눅스 스레드 결합(coupling)

스레드 스케줄링이 응용프로그램 프로세서의 순위에 영향을 받는 방식

리눅스 스레드 실행


3.1 안드로이드 응용프로그램 스레드

응용프로그램 관점에서 스레드는 UI, 바인더, 백그라운드 스레드 등 3가지 유형이 있음



3.1.1 UI Thread 

수명 : 응용 프로그램의 시작과 함께 실행되고, 응용프로그램의 프로세스와 같은 수명을 갖는다.

역할 : 안드로이드의 구성요소를 실행하고, 화면 UI요소를 변경하는데 사용하는 메인스레드 

 (다른 Thread에서 UI변경을 시도하려는 것을 발견하면 CalledFromWorngThreadException 발생)

동시성 문제? : UI요소는 UI스레드에서만 접근하기 때문에 UI요소에 대한 접근 동기화는 필요하지 않는다. (싱글 스레드 환경을 적용하므로 동시성 문제에 영향을 받지 않는다.)


3.1.2 바인더 스레드

수명 : 스레드 풀(thread pool)이라는 스레드 집합을 유지함 (결코 종료되거나 재생성되지 않지만, 프로세스 안에서 다른 스레드의 요청에 따라 태스크를 실행할 수 있음)

역할 : 서로 다른 프로세스에서 스레드 사이의 통신에 사용된다.

종류 : System Service, Intent, Content Provider, Service


3.1.3 백그라운드 스레드

응용프로그램에서 UI스레드에 의해 파생되어 명시적으로 생성하는 모든 스레드

(UI스레드의 속성-우선순위를 상속받는다)


3.2 리눅스 프로세스와 스레드

안드로이드 플렛폼은 리눅스 기반의 OS이기 때문에 리눅스 환경에 대한 지식은 응용프로그램 파악과 프로그램 성능 향상에도 도움을 준다.


실행중인 응용 프로그램은 미리 시작된 Zygote프로세스에 의해 파생된다.


- 사용자 ID (UID) : 리눅스에서 사용자를 나타내는 고유 ID

- 프로세스 ID (PID) : 프로세스 고유 식별자

- 부모 프로세스 ID (PPID) : 안드로이드에서 모든 프로세스의 부모는 Zygote

- 스택 : 지역 함수 포인터와 변수

- 힙 : 프로세스에 할당된 주소 공간 (다른 프로세스 접근 금지)


※ 프로세스와 스레드의 차이점

프로세스끼리는 서로 주소 공간을 공유하지 않지만, 스레드끼리는 프로세스 내에서 주소 공간을 공유한다.


3.2.1 스케줄링

안드로이드 응용 프로그램 내의 스레드 끼리의 경쟁 또는 모든 응용프로그램의 모든 스레드와의 경쟁하는데 있어서 스케줄링


스케줄링에 영향을 미치는 방법 : 우선순위, 컨트롤 그룹


우선순위 (niceness value)

-20 (가장 높은 우선순위) ~ 19 (가장 낮은 우선순위) 

default : 0


-java.lang.Thread

setPriority(int priority); 로 0부터(낮은 우선순위) 10까지(가장 높은 우선순위) 설정 가능

-android.os.Process

Process.setThreadPriority(int priority); // 스레드 호출

Process.setThreadPriority(int threadId, int priority); // 특정 id를 가진 스레드


컨트롤 그룹

안드로이드는 Foreground Group과 Background Group으로 나뉜다.

그룹끼리 프로세서의 실행 시간이 서로 다른 값으로 할당될 수 있도록 실행의 제약조건을 정의한다.


3.3 마치며

안드로이드의 모든 스레드 유형(UI, 바인더, 백그라운드)은 리눅스 포직스 스레드다.

UI스레드는 가장 중요한 스레드지만, 다른 스레드에 비교해서 특별할 스케줄링을 갖지 않는다.

백그라운드 스레드를 백그라운드 컨트롤 그룹에서 실행시키게 하여 UI스레드를 방해하지 못하게 하는 것이 프로그래밍에서 중요하다.

[본문링크] 안드로이드 스레드
[1]
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=34923
작성자
비밀번호

 

SSISOCommunity

[이전]

Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.