안드로이드 스레드(Android Thread)란? (2)

쓰리원·2022년 6월 3일
0

Thread

목록 보기
3/3
post-thumbnail

1. Android에서 스레드의 작동

응용 프로그램이 장치에서 처음 시작될 때 Android 시스템은 단일 실행 스레드로 새 Linux 프로세스를 시작합니다. 따라서 하나의 프로세스와 하나의 스레드가 있습니다. 프로세스 스레드 관계를 계층 구조로 생각할 수 있습니다. 프로세스 내부에는 서로 독립적으로 작동하는 스레드가 여러개 있을 수 있습니다.

메인 스레드는 새 프로세스 내에서 가장 먼저 생성되는 스레드입니다. UI 스레드라고도 합니다. 메인 스레드에서 무거운 작업을 수행하면 안 됩니다. 그렇게 하면 애플리케이션이 정지되고 ANR 대화 상자(애플리케이션이 응답하지 않음)가 표시됩니다.

따라서 애플리케이션 정지를 피하기 위해서 메인 스레드에서 작업을 수행을 과도하게 하지 않아야 합니다. 해결책으로는 다른 스레드를 생성하고 거기에서 무거운 작업을 수행할 수 있습니다. 작업이 다른 스레드에서 수행되면 애플리케이션이 정지될 위험이 없습니다.

2. 스레드의 구조

모든 스레드 내부에는 Message Queue로 알려진 것이 있습니다. Message Queue는 작업 스택으로 생각할 수 있습니다.

큐의 맨 위에 있는 작업이 실행된 다음 소멸되고 다음 작업이 큐의 맨 위로 이동됩니다. 이러한 작업 단위는 실행 가능한 개체 또는 메시지 개체일 수 있습니다. 이 메커니즘의 마지막 부분은 루퍼입니다. 모든 스레드에는 루퍼가 있습니다. 루퍼는 메시지 대기열 내부의 작업을 관리하는 역할을 합니다 . Looper는 엔진으로 생각할 수 있습니다. 전체 시스템을 계속 작동시키는 엔진입니다. 이것이 메인 스레드를 포함한 모든 스레드 내부에서 실행되는 일반적인 메커니즘입니다.

백그라운드 스레드에서 작업을 수행할 때 가장 어려운 부분은 스레드 자체를 빌드하는 것이 아니라 스레드와 통신하는 것입니다. 그것이 Handler 객체가 들어오는 곳입니다.

데이터베이스를 쿼리하고 모든 국가 목록을 검색하려면 백그라운드 스레드에 데이터베이스를 쿼리하도록 지시한 다음 국가 목록을 표시할 수 있는 기본 스레드로 다시 보내야 한다고 가정합니다.

우리가 해야 할 첫 번째 일은 백그라운드 스레드에 메시지를 보내고 우리가 하고 싶은 일을 알리는 것입니다. 메인 스레드에 메시지 객체를 생성합니다. 이 메시지 객체는 Handler를 사용하여 백그라운드 스레드로 전송됩니다. 그런 다음 메시지는 메시지 큐에 추가되고 스택의 맨 위에 도달하면 실행됩니다.

데이터베이스 쿼리가 완료되면 루퍼는 메시지 큐를 정리한 다음 쿼리 데이터를 다시 메인 스레드로 보냅니다.다시 한번 또 다른 메시지 객체가 생성되고, 데이터는 번들을 사용하여 메시지 객체에 첨부되고 메인 스레드 핸들러는 백그라운드 스레드에서 메인 스레드로의 메시지 전달을 용이하게 합니다. 메시지가 수신되면 메인 스레드의 메시지 큐를 통해 이동하고 데이터는 결국 뷰에 표시됩니다.

3. reference

https://developer.android.com/guide/components/processes-and-threads?hl=ko
https://medium.com/@souravgupta14/how-threads-work-in-android-3a0ba4ca79ae

profile
가장 아름다운 정답은 서로의 협업안에 있다.

0개의 댓글