-
[Android] Thread (feat. 스레드란?)IT Study/Android 2024. 1. 24. 14:56728x90
안녕하세요. 이번 글에서는 Thread(스레드)에 대해 다뤄보고자 합니다.
바로 함께 보시죠.
✅ Thread (스레드) 개념이 필요한 이유
유튜브를 예시로 들어보겠습니다. 유튜브에서 영상을 보던 도중, 영상이 마음에 들어 오프라인 저장을 하려고 합니다.
그러나 작업 공간이 단일하게 존재할 경우(Main Thread), 영상 시청과 함께 오프라인 저장을 할 수 없습니다.
이러한 경우 또 다른 작업을 수행할 수 있는 스레드가 필요할 것입니다.
주요한 작업 외에 또 다른 주요 작업을 수행하기 위해 만든 작업 공간, Worker Thread가 필요합니다.
🛰️ Thread (스레드, 작업 공간)
애플리케이션이 시작되면 시스템은 애플리케이션에 대한 실행 스레드를 생성하며, 이를 기본이라고 합니다.
(안드로이드 앱이 실행이 되면, 안드로이드 OS 단에서는 이 앱을 실행하기 위한 스레드를 생성합니다.)
안드로이드 OS "이 앱을 실행하기 위한 작업 공간을 줄게"
이러한 스레드는 Android UI 도구 키드의 구성 요소(android.widget, android.view 패키지 구성 요소)와
앱이 상호작용하는 스레드입니다.
(스레드에서 위젯, 뷰를 조작할 수 있습니다. setText 등의 작업을 스레드에서 진행합니다.)
그렇기 때문에, 기본 스레드는 UI 스레드라고 불릴 때도 있습니다.
🛸 Thread 종류
1. Main Thread (메인 스레드, UI 스레드)
앱이 실행되며 안드로이드 시스템이 생성하는 오직 하나의 스레드로, 오직 UI를 그립니다. (UI 관련 작업을 수행합니다.)
2. Worker Thread (워커 스레드, 작업자 스레드)
메인 스레드 외의 스레드로, 시간이 오래 걸리는 작업을 수행하는 스레드입니다.
(네트워크 통신, 데이터베이스 I/O 등)
👩🏻🚀 Thread 규칙
1. UI 스레드를 차단하지 마라.
앱이 일정시간 동안 반응이 없는 경우가 바로 UI 스레드가 차단된 경우인데,
이때 ANR(Application Not Responding) Exception이 날 수 있습니다.
2. UI 스레드 외부에서 Android UI 도구 키트에 접근하지 마라.
"워커 스레드에서는 UI 작업을 수행하지 마라"는 내용입니다.
안드로이드에서는 UI를 그리는 것이 가장 중요한 작업인데 이러한 작업을 여러 작업 공간에서 수행하게 된다면,
작업의 순서, 중요도를 시스템 단에서 구별하기 어려워집니다.
이에 따라 UI 작업은 오직 메인 스레드에서 수행해야 합니다.
그러나 실제 작업을 진행하다 보면, 메인 스레드가 아닌 워커 스레드에서도
(영상 다운로드 완료, 에러 등을 유저에 알리는 작업과 같이) UI 조작을 해야 하는 경우가 생깁니다.
🚀 워커 스레드에서 UI 조작하는 방법 (해결 방법)
출처 : 35개 프로젝트로 배우는 Android 앱 개발 feat.Jetpack Compose (Chapter1 - Ch06) - Activity.runOnUiThread(Runnable)
- View.post(Runnable)
- View.postDelayed(Runnable, long)
- Handler워커 스레드가 UI를 조작하기 위해서는 Handler에
(실행 가능한) Runnable 객체를 보내거나 메시지 객체를 보낼 수 있습니다.
이러한 요청을 메시지 큐(Message Queue)에 담아 순차적으로 처리할 수 있습니다.
Looper는 메시지 큐에 작업이 요청되었는지 지속적으로 모니터링하는 역할을 합니다.
Message가 들어온 경우 Handler에 메시지 처리를 요청하고, Runnable 객체가 들어온 경우 Looper가 실행하게 됩니다.
'IT Study > Android' 카테고리의 다른 글
[Android] Foreground Service를 사용하고 싶을 경우 (feat. API 레벨 34 이상) (0) 2024.01.30 [Android] View Binding (feat. 뷰 바인딩 전 늘 하는 사전 작업) (2) 2024.01.27 [Android] counter(계수기, 숫자 세기) 앱 (feat. 화면 회전 시 초기화, 화면 회전 시 UI 가려지기, weight) (1) 2024.01.21 [Android] View 그려지는 과정 (뷰가 그려지는 순서) (2) 2024.01.20 [Android] 액티비티의 라이프 사이클 (생명주기, Life cycle) (0) 2024.01.20