스마트웹앱콘텐츠전문가/안드로이드

[안드로이드]프로세스와스레드

9D4U 2018. 2. 6. 13:09
728x90
반응형

[안드로이드 프로세스와 스레드]

※프로세스, 스레드, 컴포넌트와의 관계


- 프로세스 : 실행 중인 프로그램

- 스레드 : 실행 중인 프로그램 내에서 동작하는 작업의 단위


UID : User ID <- AndroidManifest.xml 파일에 선언되어 있는 package name 단위로 할당됨. = 이는 앱마다 UID를 다르게 할당하여 다른 앱의 파일을 임의로 수정하거나 삭제할 수 없도록 하기 위한 안드로이드 정책임.

+ UID는 앱이 설치되면 할당되는 것이기 때문에 항상 동일한 UID를 가지는 것은 아님. 따라서 앱을 삭제 한 후 다시 설치하면 UID가 변경 될 수 있음.

PID : Process ID, 앱이 실행되어 프로세스가 생성되는 시점에 할당 받음. <- 


○ PID값은 UID와 맵핑되어 있음. 대부분의 앱은 하나의 프로세스만을 사용하지만, 일부 앱은 AndroidManifest.xml파일에서 android:process를 이용하여 하나의 앱에 여러 개의 프로세스를 만들어 사용할 수 있음.



각각의 앱은 UID,PID가 다름. <- 이는 안드로이드에서 실행 파일 수행에 있어 달빅 가상머신(Dalvik VM)을 사용하기 때문.


cf)

UID

샌드박스 : 안드로이드 장치의 각 애플리케이션은 자신의 샌드박스(sandbox)에 디렉터리를 갖고 있음. 이 샌드박스에 파일을 저장하면 다른 애플리케이션이나 다른 사용자가 해당 파일을 액세스하는 것을 막아줌.

PID : 



cf)안드로이드의 포렌식 기법이 보안 이슈?





○간단한 예제

1. processthread 이름으로 신규 프로젝트를 생성

※ AndroidManifest.xml 파일에서 android:process 항목에 ':'의 뒤에 대문자가 오면 동일한 UID에서 사용할 수 있지만, 소문자가 오는 경우 다른 앱에서도 사용할 수 있는 글로벌 프로세스로 만들어짐.

   글로벌 프로세스 같은 경우 리소스를 공유하기 때문에 리소스를 줄이는 효과를 가질 수 있음. 



○ 안드로이드 프로세스 

- 설치되고 실행될 때 만들어짐. 이떄 하나의 메인 스레드가 만들어지고 이 메인 스레드에서는 안드로이드 컴포넌트인 액티비티,서비스, 컨텐트 프로바이더, 브로드캐스트/리시버가 동작을 함

  그런데 프로세스들에서는 액티비티, 서비스와 같이 라이프 사이클이 존재함. = 이를 프로세스 라이프 사이클이라고 함.

  프로세스 라이프 사이클은 안드로이드 단말의 제한적인 메모리를 효율적으로 사용하기 위하여 프로세스의 중요도 별로 구분 시켜 놓은 것.

- 프로세스 라이프 사이클

1. Foreground Process(포그라운드 프로세스) : 

프로세스 내에 동작 중인 액티비티가 Resume 상태로 사용자가 해당 액티비티를 사용 중인 상태.

프로세스 내의 서비스가 Foreground Service로 동작 중인 상태.(Foreground Service : Nottification bar에 동작 중인 서비스의 아이콘이 표시되는 서비스)

프로세스 내의 리시버에서 onReceive() 함수가 동작 중인 상태

2. Visible Process :

프로세스 내의 액티비티가 Pause 상태로 사용자가 볼 수만 있는 상태

3. Service Process :

프로세스 내의 동작 중인 서비스가 있는 상태

4. Background Process :

프로세스 내의 액티비티들 중에 사용자에게 보여주는 액티비티가 없으며, 사용자에게 보여주지 않는 액티비티들이 존재함.

프로세스 내의 서비스들 중에 동작 중인 서비스가 없는 경우.

Background Process 단계부터 안드로이드 시스템에서 프로세스를 강제 종료하여 부족한 메모리를 회수하게 됨.

사용자가 앱을 사용하다가 HOME Key를 이용하여 액티비티를 백그라운드 상태로 만들 경우, 언제든지 프로세스가 강제 종료될 수 있기 떄문에 사용 중이던 액티비티는 상태를 저장할 수 있어야 함.

5. Empty Process :

프로세스 내에 동작 중인 액티비티 또는 서비스가 없는 경우에 Background Process와 마찬가지로 안드로이드 시스템에서 프로세스를 강제 종료하여 부족한 메모리를 회수한다.

-> Background Process, Empty Process 는 부족한 메모리 회수.

○ 안드로이드 스레드

- 프로세스 내에서 실질적인 작업의 수행 단위를 말함.

- 안드로이드에서 프로세스가 실행되면, 프로세스 내에는 메인 스레드가 생성되고, 메인 스레드 내에서 안드로이드 컴포넌트들이 동작하는 형태임.

  그리고, 메인 스레드에서 동작 중인 안드로이드 컴포넌트들이 스레드를 생성하여 작업을 수행할 수 있음.

- 만약, 시간이 오래걸리는 작업을 메인 스레드에서 진행하면, 사용자 입장에서는 앱이 중지되어 있는 것으로 보일 수 있기 떄문에 안드로이드 시스템에서는 일정 시간 동안 응답이 없는 경우,

  ANR(팝업의 형태로, 사용자에게 종료와 대기를 선택할 수 있는 다이얼로그 창을 제공함)을 통해 사용자에게 종료를 할 것 인지 대기를 할 것인지 선택할 수 있도록 팝업을 제공함.

728x90