미분류 - 2주차 공부2
카테고리: unclassified
태그: 미분류
Process와 Thread
ANR (Application Not Responding)
- 앱이 입력 이벤트에 5초 내에 응답하지 못했을 경우
- BroadcastReceiver가 10초 내에 실행을 완료하지 못했을 경우
Q. 해결법?
- Thread / HandlerThread
- background Thread
결론은 Main Thread와 독립적인 새로운 Thread에서 작업을 할 필요가 있음
Process
- Linux 프로세스가 안드로이드앱을 실행
- 프로세스의 lifecycle은 시스템이 제어함
- 주요 구성요소(컴포넌트)가 프로세스가 미치는 영향을 고려해야 함
- 프로세스 유형
- foreground process
- visible process
- service process
- cached process
Thread
- 프로세스가 실행할 명령
- Main thread 역할 : UI 작업
- Background thread / Worker thread 역할 : Main thread에서 차단할 가능이 있는 작업
아 그런데 문제가 뭐냐 하니, Background thread에서 완료한 작업에 대한 데이터를 UI에 표시하려면 이 데이터를 Main(UI) thread에 알려줘야한다!!
어떻게? -> Runnable을 MessageQueue에 등록
Handler, Message, Runnable
-
Runnable :
Single Abstract Method (SAM)인run()
을 가지고 있는 인터페이스, 실행하고자 하는 작업 -
Message Queue :
Looper 내부의 Message(작업 처리 단위)를 관리하는 Queue -
Looper :
Looper는 Thread 당 하나씩만 가질 수 있고 Message Queue가 비어있을 때에는 아무 동작하지 않다가 Message가 들어오게 되면 Message를 꺼내 적절한 Handler로 전달하는 역할을 한다. -
Handler :
Message에 대한 상호작용을 하는 중간 처리자? Looper에게 Message를 전달
실행하고자 하는 작업을 Runnable의 형태로 Message에 담아 Handler로 Looper에 전달, Looper는 Message Queue를 확인해 예약된 작업이 있을경우 적절히 실행