티스토리 뷰

신입 또는 경력자 면접 질문에서 나오는 질문이지만 가끔 얘기를 할려고 하면 생각이 안날 때가 있다. 일단 적어보자.

 

Program ?

- 저장 장치에 저장되어 있는 실행 가능한 명령어의 집합

 

Process ??

- 프로그램을 실행하여 메모리에 적재된 실행중인 상태가 되면 프로세스

- 각 프로세스에 독립된 자원이 할당됨 (할당 자원 : Code, Data, Stack, Heap)

- 각 프로세스는 독립된 주소 공간에서 실행되고, 서로간에 데이터에 접근할 수 없음.

- IPC(Inter-Process-Communication)을 통해 다른 프로세스의 자원 접근 가능

 

Thread ???

- 프로세스가 할당받은 자원을 이용하는 실행 단위

- 각 스레드는 프로세스 내에서 Stack만 따로 할당받고, Code, Data, Heap 영역은 공유함

 

일반적인 얘기는 여기까지이고, 안드로이드에서의 개념으로 얘기해보자.. 

안드로이드에서는 Thread, Handler, Looper를 이해하면 된다.

 

Handler ??

- 쓰레드간의 통신을 위한 방법 (보통 쓰레드에서 처리한 데이터를 이용하여 UI 처리를 하기 위해 사용한다.)

 

안드로이드는 기본적으로 프로그램이 실행될 때 최초로 메인 쓰레드가 실행되고 UI 관련 처리를 할려면 메인 쓰레드를 통해서만 처리가 가능하다. (Main Thread == UI Thread) 메인 쓰레드는 Looper와 Message Queue를 가지고 있는데, Message나 Runnable을 FIFO 방식으로 처리하게 된다. 그리고 Handler는 다른 쓰레드에서 발생한 메시지를 Message Queue에 넣거나 Looper로부터 Message나 Runnable을 받아서 처리하게 됩니다. 또한, Handler는 해당 Handler를 생선한 Thread에 연결됩니다.

MainThread에서 생성된 Handler => UI 처리 가능

OtherThread에서 생성된 Handler => UI 처리 불가능

Main Thread는 기본적으로 Looper와 Message Queue를 가지고 있지만 새로 생성한 Thread는 Looper가 없고 run이 끝난 뒤에 종료된다. 하지만 Handler Thread로 생성을 하게 되면 자동으로 Looper가 생성된다. runOnUiThread는 UI Thread일 경우에는 바로 실행을 하게 되고 아닐 경우에는 UI Thread의 자원을 가져와서 실행한다.

 

일단 이정도면 기본적인 설명이 들어간 것 같다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함