HS_development_log

Android - Thread 본문

Android

Android - Thread

DevHyeonseong 2020. 7. 17. 00:38
반응형

 

1. 스레드(Thread) 란?

 

  • CPU 이용의 기본 단위

  • 프로세스(process) 내에서 실행되는 기본 단위

-> 따라서, 스레드란 프로세스 내에서 순차적으로 실행되는 실행 흐름의 최소 단위를 말합니다. 

 

 

1.2. 단일 스레드(single thread) VS 다중 스레드(multi thread)

 

단일 스레드는 프로세스 내의 스레드가 1개인 경우, 다중 스레드는 프로세스 내의 스레드가 2개 이상인 경우입니다.

다중 스레드의 장점으로는 

  • 빠른 응답성 : 프로그램 한 부분을 수행하다가 중단되어도 다른 부분이 계속 수행할 수 있어 사용자에게 응답성을 좋게 할 수 있다.

  • 자원 공유 : 스레드는 속해있는 프로세스의 메모리 및 자원을 공유한다.

  • 경제성 : 프로세스의 생성은 메모리 할당 등 비용이 많이 들지만, 스레드는 프로세스 내에서 생성되며 비용이 적게 든다.

  • 멀티 프로세서의 활용 : 각 스레드가 다른 CPU에서 수행될 수 있으므로 멀티 프로세서의 여러 CPU를 활용할 수 있다.


2. 안드로이드 스레드 생성

 

안드로이드의 스레드 또한 자바 SDK에 포함된 API를 사용합니다.

안드로이드에서 스레드를 만드는 방법은 두 가지가 있습니다.

 

2.1. Thread 클래스 상속

이런 식으로 스레드가 생성가능합니다. 스레드 인스턴스를 생성하고 start() 메소드를 실행하면 run()메소드가 호출됩니다.

 

2.2. Runnable 인터페이스 구현

Runnable을 구현한 클래스를 Thread의 생성자로 넘기면 됩니다. 

 

아니면 람다식을 활용하여 이런식으로 구현할 수 도 있습니다.

 


3. 메인 UI 스레드 in UI 프레임 워크

  • 사용자 입력이 필수인 프로그램에서는 사용자 입력 이벤트를 처리하기 위해 루프(Loop)가 실행되어야 합니다.

  • UI 프레임워크는 메시지 큐(Message Queue)를 사용하여 루프의 코드를 작성하도록 가이드합니다.

  • 메시지는 사용자 입력을 포함한 시스템의 모든 이벤트를 전달할 때 사용하는 객체입니다.  

  • 새로운 메시지가 메시지 큐에 수신되면, 메시지가 담고 있는 내용에 따라 적절한 핸들러(Handler) 메서드가 호출됩니다.


4. 안드로이드 메인 UI 스레드

  • 안드로이드에서 시스템 이벤트를 처리하기 위한 루프(Loop)는 Looper라는 클래스를 통해 실행됩니다.

  • Looper 클래스의 역할은 루프를 실행하고 그 루프 안에서 메시지 큐로 전달되는 메시지가 존재하는지 검사하는 것입니다.

  • 새로운 메시지가 도착하면, 해당 메시지를 처리할 핸들러(Handler) 메서드를 실행합니다.

  • 안드로이드의 Handler는 Handler 클래스가 담당합니다. 핸들러는 Looper가 가진 메시지 큐를 다룰 수 있기 때문에  메시지 수신 및 처리, 메시지 송신 역할을 수행합니다. 

출처 : http://blog.naver.com/PostView.nhn?blogId=huewu&logNo=110115454542

4.1 안드로이드 메인 UI 스레드의 역할

  • 안드로이드에서 UI와 관련된 작업은 반드시 메인 UI 스레드에서만 실행되어야 합니다.

  • UI를 제대로 표시하기 위해서는 각 요소를 그리는  순서가 절대적으로 중요하기 때문에 반드시 메인 UI 스레드에서만 순차적으로 그려야 합니다.

 

참고 사이트
recipes4dev.tistory.com/143
 

안드로이드 스레드(Android Thread)

1. 스레드(Thread), 그리고 프로그램(Program)과 프로세스(Process). 스레드(Thread)를 설명하는 이 문장을 읽고 나서, 어떤 용어 또는 개념들이 머리 속에서 확장되나요? 스레드(Thread)라는 단어를 듣는 것

recipes4dev.tistory.com

반응형

'Android' 카테고리의 다른 글

Android - Intent  (0) 2020.07.17
Android - View , ViewGroup  (0) 2020.07.17
Android - Activity Lifecycle  (0) 2020.06.29
Android - Fragment  (0) 2020.06.29
Android - Component  (0) 2020.05.24