Kotlin Thread

이하은·2022년 4월 5일
0

KotlinStudy

목록 보기
1/3

안드로이드 Thread

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

Main Thread (UI Thread)

Activity를 비롯한 모든 컴포넌트는 단일 프로세스 및 메인 스레드에서 실행된다.
화면의 UI를 그리는 스레드
안드로이드 UI 툴킷의 구성요소와 상호작용하고 UI 이벤트를 사용자에게 응답하는 스레드
(UI이벤트 및 작업에 수 초 내에 응답하지 않으면 안드로이드 시스템은 팝업창을 표시하므로,
오래 걸리는 코드는 새로운 스레드를 생성하여 처리해야 함)

좋은 앱은, 처리 자체의 지연이 있더라도, 사용자와 지속적으로 상호작용 할 수 있어야 한다.

Background Thread

네트워크 작업, 파일 업로드 다운로드, 이미지 처리, 데이터 로딩 등은 짧은 시간이 걸린다고
하더라도 처리 시간을 계산할 수 없다. 그래서 안드로이드 시스템은 메모리 이외의 다른 곳에서 데이터를
가져오는 작업을 백그라운드 스레드에서 처리하는 것을 권장한다.

Background Thread 생성 방법

A. Thread 객체를 이용하는 방법

  1. thread 클래스를 상속받는 WorkerThread 클래스를 정의하고, run() 메서드를 override 한다.
class WorkerThread: Thread () {
	override fun run() {
    
    }
}
  1. run( ) 메서드 안에 작업을 진행하는 코드를 작성한다. 이후 run()의 실행이 끝나면 스레드는 중료된다.
override fun run() {
	var i = 0
    while (i < 10) {
    	i += 1
        Log.i("WorkerThread","$i")
    }
}
  1. 이후, WorkerThread 객체를 생성하여, 별도의 스레드를 생성하고 start () 메서드를 호출하면,
    run() 메소드에 정의된 로직을 생성된 스레드가 처리한다.
var thread = WorkerThread()
thread.start()

B. Runnable 인터페이스 이용

  1. Runnable 인터페이스를 구현하는 WorkerRunnable 클래스를 정의하고, 그에 따른 run() 메서드를 구현한다.
class WorkerRunnable : Runnable {
	override fun run() {
    	var i = 0
        while (i < 10) {
        	i += 1
            Log.i("WorkerRunnable","$i")
        }
    }
}
  1. Thread 를 상속받은 객체와 달리 Runnable 인터페이스를 구현한 객체는 Thread 클래스의 생성자로 전달하고 Thread 클래스의 start() 메서드를 호출해야 스레드가 생성된다.
var thread = Thread(WorkerRunnable()) <-- 다른 부분
thread.start()

C. 인터페이스 내부에 메서드가 하나만 있는 경우, 람다식으로 변환 가능

Thread {
	var i = 0
    while (i < 10) {
    	i += 1
        Log.i("LambdaThread","$i")
    }
}.start()

D. 코틀린에서 제공하는 Thread() 구현

thread(start=true) {
	var i = 0
    while (i < 10) {
    	i += 1
        Log.i("KotlinThread","$i")
    }
}

Main Thread 이외에는 UI를 업데이트 할 수 없다. -> 윈도우 프로그램이나 IOS 앱과 같은 다른 어플리케이션에도 적용되는 사항

출처 : 이것이 안드로이드다 (개정판) with Kotlin by 고돈호

profile
이하은

0개의 댓글