미분류 - 2주차 공부2

업데이트:

카테고리:

태그:


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를 확인해 예약된 작업이 있을경우 적절히 실행