안녕하세요 꼬로미입니다!
안드로이드 프로세스와 스레드에 대해 포스팅합니다
스레드의 기본 개념과 프로세스를 한번 살펴볼게요
프로세스와 스레드
안드로이드는 하나의 애플리케이션이 여러가지 작업을 할 수 있어요
따라서 다중 스레딩(milti-threading)을 지원합니다
* 자바의 스레딩 기능을 그대로 지원
안드로이드의 2가지 실행 단위
프로세스(process)
독자적으로 실행이 가능한 환경, 자기만의 메모리 공간을 가지며 메모리 공간은 분리됨
자신만의 데이터를 가짐
스레드(Thread, 실행흐름, 경량프로세스)
모든 프로세스에 적어도 1개의 스레드가 존재
스레드들은 메모리와 파일, 모든 자원을 공유
프로세스 안에 존재
프로세스 생성보다 부담이 적음
동일한 데이터(변수)를 공유
데이터 공유 -> 동기화 문제 발생
프로세스
기본적으로 애플리케이션의 모든 컴포넌트들은 하나의 프로세스 안에서 실행되며
매니페스트 파일 설정으로 컴포넌트별로 다른 프로세스에서 실행도 가능
(각 컴포넌트는 android:process 어트리뷰트를 이용해 실행되는 프로세스 설정이 가능)
프로세스 생애주기
프로세스 유지와 제거를 위해 5개의 단계로 구성된 계층구조(importance hierarchy)를 따라 결정
1. 전경프로세스(foreground process)
- 사용자가 현재 작업하고 있는 프로세스로 밑의 조건 중 하나를 충족하는 프로세스
- 사용자와 상호작용하는 액티비티를 가짐
- 사용자와 상호작용하는 액티비티에 연결된 서비스를 가짐
- 전경에서 실행되는 서비스를 가짐 (서비스가 startForeground() 호출)
- onCreate(), onStart(0, onDestory() 메소드를 실행하고 있는 서비스를 가짐
- onReceive()를 실행하고 있는 방송 수신자를 가짐
전경 프로세스는 사용자와 상호작용하고 있기에 갯수가 많지 않으며 중요성이 높음
2. 가시적인 프로세스(visible process)
전경 컴포넌트는 가지지 않지만 화면에서 사용자가 보는 것에 영향을 끼칠 수 있는 프로세스, 밑의 조건 중 하나 이상 충족
- 전경에 있지 않지만 사용자에게 영향을 미치고 있는 액티비티를 가짐
(전경 액티비티가 대화상자를 시작했는데 이전 액티비티가 대화상자 뒤로 보이는 경우) - 가시적인 애플리케이션에 연결된 서비스를 가진 경우
가시적인 프로세스도 중요성이 높으며 꼭 필요한 경우가 아니면 제거되지 않는 특징
3. 서비스 프로세스(service process)
startService()로 시작된 서비스를 실행하고 있는 프로세스이며 앞의 경우에 속하지 않는 경우
4. 배경프로세스(background process)
현재 사용자에게 보이지 않는 액티비티를 가지는 프로세스 ( onStop() 메소드가 호출된 경우 )
5. 공백 프로세스(empty process)
활성화된 컴포넌트를 전혀 가지지 않는 프로세스
캐싱(caching)때문에 프로세스가 유지됨 (다시 실행시 빠르게 실행하기 위해)
안드로이드 시스템은 프로세스에서 가장 중요도가 높은 컴포넌트에 맞춰 동작합니다
읽어주셔서 감사드립니다
도움이 되셨다면 덧글을 부탁드립니다헤헤
'Study > Programming' 카테고리의 다른 글
안드로이드 스레드 AsyncTask 사용 (0) | 2014.05.17 |
---|---|
안드로이드 프로세스와 스레드 (스레드) (0) | 2014.05.06 |
윈도우기반 멀티플렉싱 서버 예제 (0) | 2014.05.01 |
안드로이드 그래픽 이미지 활용하기 (0) | 2014.04.24 |
안드로이드 대화상자(Dialog) 종류 특징 (0) | 2014.04.23 |