본문 바로가기

컴퓨터 언어/Kotlin

04. 코루틴의 Context

코루틴은 항상 특정한 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