반응형
안녕하세요 돼지왕왕돼지입니다.
오늘은 안드로이드 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 에 대해 알아보도록 하겠습니다.
그럼 오늘도 즐거운 하루~
그럼 오늘도 즐거운 하루~
반응형
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[Android/안드로이드] Emulator 에 내가 빌드한 system 이미지를 넣어보자. (0) | 2012.02.03 |
---|---|
[Android/안드로이드] Uri 확장하기. ( id 추가, parameter 구문 추가 ) (0) | 2012.02.03 |
[android/안드로이드] manifest activity 태그의 속성 theme. (0) | 2012.02.02 |
[android/안드로이드] manifest activity 태그의 속성 stateNotNeeded. (0) | 2012.02.02 |
[android/안드로이드] manifest activity 태그의 속성 screenOrientation. (0) | 2012.02.02 |
댓글