[kotlin] Thread

최윤성·2021년 3월 31일
1

Kotlin

목록 보기
1/1
  • 스레드(Thread) : 하나의 프로세스 상의 독립적인 실행 흐름
  • 프로세스(Process) : 시스템상의 실행중인 프로그램으로 각각 독립된 메모리 공간을 할당 받는다.

하나의 프로세스는 멀티 스레딩을 지원!

다음 그림을 보면 이해가 빠를것이다.

스레드의 종류

① 메인 스레드
② 백그라운드 스레드

[메인스레드는 1개만 존재, 백그라운드 스레드는 여러 개가 존재 가능]


1.메인 스레드 (UI 스레드)

메인 액티비티를 비롯한 모든 컴포넌트는 단일 프로세스 및 메인 스레드에서 실행된다.

메인 스레드 특징 및 제약사항

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

2. 백그라운드 스레드(워커 스레드)

백그라운드 스레드에서는 미리 계산 할 수 없는 작업의 처리가 권장됨.

이때, 두가지 옵션이 있는데 하나는 Thread객체, 하나는 Runnable 인터페이스로 구현이 가능하다.

  • Runnable 인터페이스 : 상속 관계에 있는 클래스도 구현할 수 있도록 지원하는 모델 (코틀린은 다중 상속을 허용하지 않는다.)
  • Thread 객체로 스레드 구현
class WorkerThread : Thread() {
override fun run() {
	var i = 0
    	while (i < 10) {
        	i += 1
        	Log.i("WorkerThread","$i")
        }
}
  • Runnable 인터페이스로 스레드 구현 : 익명객체 구현
Thread {
	var i = 0
    	while (i < 10) {
        	i += 1
        	Log.i("WorkerThread","$i")
        }
}.start()
    

3. 주의할점

만약 UI를 멀티 스레드로 변경해버린다면,,?

원하는 UI로 그려지지 않을 확률도 높고, 여러 이상현상이 발생할 것이다.

따라서 안드로이드에서는 UI를 오직 Main(UI) 스레드만 건드릴 수 있다.

메인 스레드를 정지?

절대 정지 시킬 수 없다!!(하면 안된다!)

왜냐하면, 정지 시키거나 종료 시키면 더 이상 사용자의 input을 받을 수 없기 때문이다.


오래 걸리는 작업은 작업 스레드에서, UI 업데이트만 메인 스레드에서 작업하자!!

profile
웹과 앱을 사랑하는 남자

0개의 댓글