안드로이드

UMC 안드로이드 스터디 4주차

조쿼카 2022. 4. 5. 09:52

강의 출처 : 컴공선배

 

Thread

프로그램 - 어떤 작업을 위해 실행할 수 있는 파일

프로세스 - 컴퓨터에서 연속적으로 실행되고 있는 프로그램

 

Thread

- 프로세스 내부에서 일을 하는 주체

- 실, 흐름(사전적 정의)

 

!! Thread의 문제점

 

 

Process는 기본적으로 Main thread 라고 불리는 한개의 쓰레드를 가지고 있다.

동시작업 = Multi Thread : 하나의 프로세스 내부에서 동시에 몇가지 일을 수행하는 것

동시작업이 수행되려면 prcoess 내부에 여러개의 thread가 있어야 한다.

 

- 동기 방식 (Single thread): 하나의 스레드만 가지고 일을 처리

- 비동기 방식 (Multi thread)

: 멀티 스레드로 여러 스레드를 동시 작업 처리한다.

요청이 들어와도 결과를 기다리지 않고 계속 요청을 받는다.

결과를 간접적으로 전달한다.

일을 각자 수행한다.

동시에 처리하는 것이 아니라 쪼개서 조금씩 수행(context switching)하기 때문에 동시에 처리하는 것처럼 보이는 것이다.

 

-> 멀티 스레드를 한다고 해서 속도가 빨라지는 것은 아니다.

 

- synchronize 된다.

 

안드로이드에서의 Thread

Main Thread : View Control

Worker Thread : 이외의 작업들, View Control 안됨 -> 시간 많이 안걸리도록 함 , worker thread에 무거운 일을 맡긴다.

 


[실습]

이미지를 2초마다 바꾸는 실습

-> onCreate()함수 내에서 실행하면 안됨 : 메인 액티비티에서 이미지를 바꾸는 일을 하면 버튼 클릭 등 다른 일을 수행하지 못한다. 따라서 이미지 바꾸는 일은 Worker Thread에서 진행해야한다.

 

- Main Thread에서만 뷰 렌더링을 할 수 있다. -> worker thread에서 뷰 렌더링을 시도하면 오류가 난다.

-> 해결방법 :

1. Handler 만들어주기

handler.post{  //handler를 통해서 아래 코드의 내용들을 메인 스레드로 전달하여 거기서 실행시켜준다.
    binding.iv.setImageResource(image)

    Thread.sleep(2000)
}

2. runOnUiThread 사용

runOnUiThread{
    binding.iv.setImageResource(image)
}
Thread.sleep(2000)

 

 

스플래쉬 화면 만들기

1. handler 사용하기

2. 시작 테마에서 style 지정

 


워크북

  • Handler

-  서로 다른 쓰레드 간의 통신을 위한 장치

-  Looper를 통해 처리할 데이터를 받고 보내는 중간 브로커 같은 역할

- 기본 생성자를 통해 Handler를 생성하면 해당 Handler를 호출한 쓰레드의 MessageQueue 와 Looper에 자동 연결된다.

  • Looper

스레드 당 1개씩 가지고 있다. Looper.prepare()로 루퍼를 준비하고, Looper.loop()으로 큐에서 메세지를 꺼내 핸들러로 전달한다

  • 코루틴

비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계 패턴

 

- Thread 종료 후(interrupt) 다시 실행하고 싶으면?

객체를 새로 생성하고 실행해야한다.

 

- Thread가 유용하게 쓰이는 것들

동시에 다양한 작업을 해야할 때 (이미지 로딩 & 버튼 클릭)

 

- Thread의 문제점, 해결할 방법

쓰레드를 많이 생성하면 모든 쓰레드를 스케줄링 해야 하므로, context switching이 빈번하게 일어난다.

이를 해결하기 위해 interrupt, join, AsyncTask등의 함수들을 사용하면 된다.

 

'안드로이드' 카테고리의 다른 글

UMC 안드로이드 스터디 5주차  (0) 2022.04.29
Retrofit 공부 - recyclerView실습  (0) 2022.04.05
UMC 안드로이드 스터디 4주차  (0) 2022.04.04
Retrofit 공부  (1) 2022.03.30
UMC 안드로이드 스터디 3주차  (0) 2022.03.28