728x90
코루틴은 항상 특정한 Context에서 시작합니다. Context는 코루틴이 어떤 스레드에서 시작할지 명시하는 역할을 합니다.
Dispatchers.Main = UI작업
Dispatchers.IO = 네트워킹이나 데이터베이스 처리
Dispatchers.Default = 긴 시간동안 연산이 필요한 작업
Dispatchers.Unconfined = 말 그대로 별도로 스레드를 지정 안해주는 것. 코루틴이 시작 된 스레드에서 작업을 계속 한다.
package com.goodee.test
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import com.goodee.test.databinding.ActivityMainBinding
import kotlinx.coroutines.*
class MainActivity : AppCompatActivity() {
private val TAG: String = "로그"
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
val startTime = System.currentTimeMillis()
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.nextBtn.setOnClickListener {
val startTime = System.currentTimeMillis()
// 네트워크 연결이므로 IO에서 시작한다.
CoroutineScope(Dispatchers.IO).launch {
// 현재 코루틴을 3초간 멈춘 후에 출력함.
val answer1 = doNetworkCall1()
// UI 수정은 Main에서 처리한다.
withContext(Dispatchers.Main) {
binding.mainTextView.text = answer1
}
}
}
}
// 3초가 걸리는 suspend 함수1
suspend fun doNetworkCall1(): String {
delay(3 * 1000L)
return "answer1"
}
}
728x90
반응형
'컴퓨터 언어 > Kotlin' 카테고리의 다른 글
06. 코루틴의 Job, waiting, Cancelation (0) | 2022.07.05 |
---|---|
05. 코루틴의 runBlocking (0) | 2022.07.05 |
03. 코루틴 suspend 함수 (0) | 2022.07.05 |
02. 코루틴 첫 시작 (0) | 2022.07.04 |
01. 코루틴이란 무엇인가? (0) | 2022.06.27 |