POST

[안드로이드] 코틀린 메인스레드 / 백그라운드스레드

2022.01.26 - [Android] - [안드로이드] 코틀린 Thread 클래스 / Runnable 인터페이스 사용

2022.01.26 - [Android] - [안드로이드] 코틀린 핸들러와 루퍼

2022.01.27 - [Android] - [안드로이드] 코틀린 스레드(Thread)연습 - 타이머 만들기

안드로이드의 스레드

안드로잉드의 스레드는 크게 1개만 존재하는 메인 스레드와 여러 개가 존재할 수 있는 백그라운드 스레드로 나눌 수 있습니다.

 

메인 스레드(UI 스레드)

안드로이드 시스텐은 새로운 앱이 시작하면 새로운 리눅스 프로세스를 시작합니다. 기본적으로 메인 액티비티를 비롯한 모든 컴포넌트는 단일 프로세스 및 메인 스레드에서 실행됩니다. 안드로이드의 메인 스레드는 다음과 같은 특징과 제약사항이 있습니다.

  • 화면의 UI를 그리는 처리를 담당합니다.
  • 안드로이드 UI툴킷의 구성 요소(android.widget, android.view .. ) 와 상호작용하고, UI 이벤트를 사용자에게 응답하는 스레드
  • UI이벤트 및 작업에 대해 수 초 내에 응답하지 않으면 안드로이드 시스템은 ANR(응용프로그램이 응답하지 않음) 팝업창을 표시합니다. 따라서 시간이 오래 걸리는 코드는 새로운 스레드를 생성해서 처리해야 합니다.

이러한 제약사항의 목적은 지속적이고 유연한 사용자 환경의 제공입니다.사용자의 입장에서는 1초만 느려져도 불편함을 느낄 수 있습니다. 좋은 앱 서비스는 처리 자체의 지연이 있더라도 사용자와 지속적으로 상호작용할 수 있어야 합니다.

 

백그라운드 스레드

네트워크 작업, 시간이 오래 걸리는 계산, 파일 업로드와 다운로드, 이미지 처리, 데이처 로딩 등은 처리시간을 미리 계산할 수 없습니다. 큰 파일은 다운로드 시간이 오래 걸리고, 작은 파일은 빨리 끝날테니까요. 안드로이드 시스템은 이렇게 시간을 특정할 수 없는 작업을 백그라운드 스레드에서 처리하는 것을 권장합니다.