[TIL]Android Thread

mandoofu·2024년 9월 20일

안드로이드

목록 보기
10/20
post-thumbnail

Thread

  • Thread

    • 한개의 Process내에서 동시에 실행되는 작업의 단위
    • Thread는 Process의 자원을 공유하지만 독립적으로 실행 가능
    • Main(UI) Thread는 UI를 실행 시키고 사용자와의 상호작용을 위한 용도
  • Multi-Thread

    • 한 개의 Process내에서 동시에 2개 이상의 Thread가 실행되는 상태
    • 동시성 문제가 발생할 수 있다
  • Multi-Tasking(Process)

    • Process는 Thread와는 달리 독립적인 자신만의 메모리 공간을 가지고 있음
  • 사용자와의 상호작용을 다루는 UI는 Main-Thread에서 처리하고, 그 외 시간이 소요되는 작업 또는 바로 실행되지 않는 작업은 Back Ground Thread로 처리됨

  • Back Ground Thread/Coroutine의 필요성

    • ANR Dialog
      • 안드로이드에서 Main Thread가 오랜 시간동안 작업을 처리하고 있으면, 앱이 죽었다고 판단하여 사용자에게앱을 종료할 것인지 물어보는 Dialog
      • 시간이 소요되는 작업을 수행해야 하는 경우에 ANR이 발생하지 않도록 별도의 Thread로 처리
    • Network/IO Block
      • Android Network관련 메소드는 Blocking으로 되어 있기 때문에 Network 연결, 데이터 쓰기 및 읽기 등을 수행할 때, 안드로이드에서는 Main Thread로 수행할 수 없도록 하고 있다
      • NetworkOnMainThreadException
      • Network 등의 작업은 Back Ground Thread 로 처리 해야 함
    • SurfaceView 처리
      • SurfaceView를 이용하여 별도의 Surface를 생성한 경우, 일반적으로 이 Surface에 그림을 그리는 작업은Loop를 돌면서 처리한다. 이처럼 무한 loop을 돌면서 계속 처리를 해 주어야 하는 경우 별도의 Thread를 만들어 처리한다.
  • Thread Handling

    • Main thread 에서 Handler 생성 시 Looper,Message Queue 가 자동생성 된다.
      Message(Runneable) 객체가 Message Queue에 적재됨
    • Looper는 Message Queue에서 메세지를 꺼내는 역할을 담당
    • Handler의 handleMessage(Message)메소드는 Main Thread에 정의를 해줘야함

0개의 댓글