본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android/안드로이드] process 와 thread 에 대한 개념 및 배경 지식 #1 ( process )

by 돼지왕 왕돼지 2012. 2. 3.
반응형

안녕하세요 돼지왕왕돼지입니다.
오늘은 안드로이드 process 와 thread 의 개념과 배경지식에 대해 살펴보겠습니다.


process 와 thread 의 개념과 배경이란게 뭘 말하는 것이냐구요?
안드로이드가 process 와 thread 를 어떻게 생성하고 관리하느냐죠.
프로그램적인 분석이 아닌 안드로이드 Framework 자체의 특성을 함께 알아보고자 하는 것입니다.

 

그 중 오늘의 다뤄볼 파트는 Process!!

Developer 문서로부터 출발해보죠

- 한 application 이 시작될 때, 그 application에 관련된 component 가 미리 실행되는 상태가 아니라면, 
 새로운 Linux process 를 생성하고, Thread 를 하나 만들어줍니다. ( Main thread )
 
- 기본적으로 한 application에 속한 모든 component 들은 같은 process 안의 main이라 불리는 같은 thread 에서 실행.
 
- 만약 한 application 이 시작될 때, 해당 process 가 이미 돌고 있다면 
( application의 어떤 component가 미리 실행중이란 얘기겠죠 ) 그 process 의 main 에서 돌게 됩니다.
 
- 물론 당신은 component 들이 돌 process 와 thread 를 생성 또는 지정할 수도 있습니다. 


기본적으로 고개가 끄덕끄덕 하게 만드는 작동 특성이죠.



자 그럼 이제 안드로이드가 process 를 어떻게 관리하는지 한번 봅시다.

- 기본적으로 한 application의 모든 component 는 한 process 에서 동작한다.
 
- 개발자는 이 기본동작을 Manifest 조작으로 바꿀 수 있다.
  4가지 기본 component ( activity, service, receiver, provider ) 는 android:process 를 지원한다.
  이 value 를 바꿈으로서 해당 component 가 실행되는 process 를 변경 할 수 있다.
 
- 안드로이드는 메모리가 부족한 경우정책에 의해 중요도가 낮은 process 를 kill 하고 이어 destroy 시킨다.

이 부분도 저~억당히 고개가 끄덕여지는 부분입니다. 
다만 모바일 단말들은 메모리가 부족한 경우가 자주 발생하는데.. 중요도가 낮은 process 는 어떤 process 들일까요?
내 앱이 그냥 마구마구 죽어나가는 건 아닐까요?


그래서, 중요도에 대한 자료도 준비했습니다.
중요도는 어떻게 결정되는지 알아봅시다!!

5가지 level 로 중요도를 결정합니다. ( importance hierarchy )
중요도가 높을수록, 메모리가 부족해도 kill 될 확률이 적습니다.

중요도 5  :  Foreground Process 
- onResume() 이 불린 이후의 user 와 interact 하는 activity
 - user 가 interact 하는 activity 와 bound 된 service
 - startForefround() 로 시작된 service
 - onCreate(), onStart(), onDestroy() 를 진행중인 service
 - onReceive() 를 수행중인 Broadcast Receiver

중요도 4  :  Visible Process
- fourground 에 있지는 않지만, user 에게 아직 보여지는 activity ( onPause() 가 불린 상태 )
 ( 예 : foreground activity 였던 녀석이 dialog 를 실행 )
- visible activity 에 bound 된 service

중요도 3  :  Service process
- startService() 로 시작된 일반 service. 
 
중요도 2  :  Background process
- 현재 user 에게 보여지지 않는 activity ( onStop() 이 불린 상태 )
-  Background process 중에서도 LRU ( least recently used ) 가 가장 먼저 제거된다.
 ( 시스템이 LRU list 를 관리 )
 ( 메모리가 많이 부족한 경우 background process 는 언제 죽을 지 모르기 때문에 상태저장이 필수. )

중요도 1  :  Empty process
- 아무런 active application component 를 들고 있지 않은 process.
  ( 이 녀석은 그럼 왜 있어? cache 목적으로 다름에 빨리 띄우려고. ) 


 
여기서 한가지 참고!! 이 importance hierarchy 는 dependency 가 있다는 것.
즉, level 이 낮은 녀석이 level 높은 녀석과 일하고 있다면, 이 녀석의 level 이 높은 녀석의 level 에 맞춰집니다. 
( 같이 일하는데 level이 낮다고 죽이면 level 높은 놈도 일을 못 하잖아요.. 그러니 당연한 거겠죠? )


추가적으로 importance hierarchy 를 보면 알겠지만, service 는 hierarchy 가 높으니,
long-run 해야 하는 녀석들은 worker thread 로 만들어 쓰는 것보다, service 를 만들어 쓰는 것이 더 좋습니다.


여기까지가 간단하게 안드로이드에서 소개하는 process 에 대한 내용이었습니다.
다음에는 thread 에 대해 알아보도록 하겠습니다.

그럼 오늘도 즐거운 하루~ 

  


반응형

댓글