[Android] 안드로이드의 Looper, Handler, HandlerThread 이해하기

2025. 9. 17. 12:15·Android

안드로이드에서 멀티스레딩을 다룰 때 자주 등장하는 세 가지 컴포넌트가 있습니다. 바로 Looper, Handler, HandlerThread입니다. 이들은 스레드를 관리하고, 메시지/작업을 큐에 넣어 순차적으로 처리하며, UI 스레드와의 통신을 가능하게 합니다.

 

🥯 Looper

Looper는 안드로이드의 스레딩 모델에서 메시지 큐를 모니터링하고 처리하는 핵심 컴포넌트입니다.
스레드를 살아있게 유지하며, 큐에 들어온 메시지나 작업을 순차적으로 꺼내 처리합니다.

주요 역할

  • 메시지 큐를 지속적으로 모니터링하고 메시지나 작업을 적절한 핸들러로 전달
  • 스레드가 종료되지 않고 계속해서 작업을 기다릴 수 있도록 유지

특징

  • 메인(UI) 스레드에는 기본적으로 Looper가 붙어 있음
  • 워커 스레드의 경우 Looper.prepare() → Looper.loop()를 통해 직접 초기화 필요
val thread = Thread {
    Looper.prepare() // Looper 준비
    val handler = Handler(Looper.myLooper()!!) // 현재 스레드의 Looper로 Handler 생성
    Looper.loop() // 메시지 루프 시작
}
thread.start()

 

🥯 Handler

Handler는 Looper와 연결되어 메시지나 Runnable을 큐에 넣고, 해당 스레드에서 실행되도록 도와줍니다.

주요 역할

  • 스레드 간 메시지 전달
  • 한 스레드에서 다른 스레드로 작업이나 메시지 전달 he(ex. 백그라운드 스레드에서 UI 업데이트 하기)

특징

  • 생성 시점의 Looper와 연결됨
  • post {} 로 Runnable 실행, sendMessage() 로 메시지 전달 가능
val handler = Handler(Looper.getMainLooper()) // 메인 스레드 Handler 생성

handler.post {
    // 메인 스레드(UI)에서 실행
    textView.text = "Updated from background thread"
}

 

🥯 HandlerThread

HandlerThread는 내장된 Looper를 가진 특별한 Thread입니다. 별도의 설정 없이 Looper가 자동으로 붙어 있기 때문에, 메시지 큐 기반의 워커 스레드를 간단히 만들 수 있습니다.

주요 역할

  • 전용 백그라운드 스레드를 생성하고 메시지 처리
  • Handler와 함께 사용해 순차적인 작업 처리 가능

특징

  • start() 호출 시 자동으로 Looper가 준비됨
  • Handler(handlerThread.looper) 형태로 Handler 생성 가능
  • 종료 시 quit() 또는 quitSafely() 호출 필요
val handlerThread = HandlerThread("WorkerThread")
handlerThread.start() // 스레드 시작

val workerHandler = Handler(handlerThread.looper)

workerHandler.post {
    // 백그라운드에서 실행되는 작업
    Thread.sleep(1000)
    Log.d("HandlerThread", "Task completed")
}

// 종료 (큐에 남은 메시지까지 처리 후 안전하게 종료)
handlerThread.quitSafely()

 

🥯 차이점

  • Looper → 메시지 루프 유지 (스레드를 계속 살아있게 함)
  • Handler → 메시지와 Runnable을 큐에 넣고 처리 (스레드 간 통신 담당)
  • HandlerThread → 자동으로 Looper가 붙은 워커 스레드 제공

 

🤷 언제 어떤 걸 쓸까?

  • Looper: 메인 스레드 유지 또는 직접 구현한 워커 스레드에서 메시지 루프가 필요할 때
  • Handler: 스레드 간 통신, 백그라운드에서 UI 업데이트 등 작업 전달이 필요할 때
  • HandlerThread: 네트워크 요청, DB 처리 등 별도의 전용 스레드가 필요한 경우

 

🥯 마무리

안드로이드의 스레드 관리 구조를 이해하는 것은 효율적인 비동기 처리의 핵심입니다.
Looper는 메시지 루프를 유지하고, Handler는 메시지를 보내고 처리하며, HandlerThread는 이를 쉽게 활용할 수 있는 워커 스레드를 제공합니다.

이 세 가지를 적절히 활용하면 UI는 부드럽게 유지하면서도 무거운 작업을 안정적으로 처리할 수 있습니다.

 

🔗 참고

  • Manifest Interview Android
반응형

'Android' 카테고리의 다른 글

[Jetpack Compose] Lazy List, 대용량 아이템 리스트 처리하기  (0) 2026.02.01
[Android] 안드로이드에서 예외(Exceptions) 추적하기  (0) 2025.09.17
[Android] 런타임 권한(runtime permissions) 처리  (1) 2025.09.14
[Android] SparseArray에 대하여  (0) 2025.09.14
[Android] ActivityManager란?  (0) 2025.09.13
'Android' 카테고리의 다른 글
  • [Jetpack Compose] Lazy List, 대용량 아이템 리스트 처리하기
  • [Android] 안드로이드에서 예외(Exceptions) 추적하기
  • [Android] 런타임 권한(runtime permissions) 처리
  • [Android] SparseArray에 대하여
yenim
yenim
    반응형
  • yenim
    FOREST, FOR REST
    yenim
  • 전체
    오늘
    어제
    • 분류 전체보기 (235)
      • Android (9)
      • Baekjoon (142)
        • 구현 (3)
        • 브루트포스 (10)
        • BFS (12)
        • DFS (13)
        • 백트래킹 (3)
        • DP (26)
        • 최소 스패닝 트리 (1)
        • 이분 탐색 (10)
        • 그리디 알고리즘 (12)
        • 투포인터 (2)
        • 슬라이딩 윈도우 (2)
        • 다익스트라 (1)
        • 시뮬레이션 (6)
        • 분할 정복 (3)
        • 문자열 (9)
        • 정렬 (6)
        • 탐색 (2)
        • 수학 (20)
        • 링크드리스트 (1)
      • 프로그래머스 (15)
        • 구현 (4)
        • 브루트포스 (4)
        • DFS (1)
        • DP (1)
        • HEAP (1)
        • 문자열 (3)
        • 해시 (0)
        • 비트 (1)
      • CS (39)
        • 개발상식 (9)
        • 자료구조 (8)
        • 네트워크 (7)
        • 운영체제 (5)
        • 데이터베이스 (4)
        • 디자인패턴 (1)
        • 알고리즘 (5)
      • Programming Languages (3)
        • C & C++ (2)
        • Kotlin (1)
      • 취준 (7)
      • Git (2)
      • Google Online Challenge (4)
      • 에러 해결 (6)
      • WEB (0)
      • NOTE (3)
      • DIARY (3)
      • 알고리즘 (1)
  • 블로그 메뉴

    • 🏡 HOME
    • ✏️ TIL
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    너비우선탐색
    DP
    CS
    BFS
    명품 자바프로그래밍
    깊이우선탐색
    그래프
    프로그래머스
    백준
    그리디 알고리즘
    코테
    다이나믹 프로그래밍
    브루트포스
    DFS
    문자열
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
yenim
[Android] 안드로이드의 Looper, Handler, HandlerThread 이해하기
상단으로

티스토리툴바