MST

星途 面试题库

面试题:Kotlin中协程的基本使用

请描述在Kotlin中如何创建一个简单的协程,并且解释协程的挂起函数是什么,如何在协程中处理异常?
47.2万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试

创建简单协程

在Kotlin中,可以使用GlobalScope.launchrunBlocking来创建一个简单的协程。例如:

import kotlinx.coroutines.*

fun main() = runBlocking {
    // 使用GlobalScope.launch创建协程
    GlobalScope.launch {
        println("这是一个在后台运行的协程")
    }
    // 使用runBlocking创建协程,runBlocking会阻塞当前线程直到协程完成
    launch {
        println("这也是一个协程")
    }
    println("主线程继续执行")
}

协程的挂起函数

挂起函数是一种特殊的函数,它可以暂停协程的执行,并将控制权交回给调用者,直到某个条件满足时再恢复执行。挂起函数必须在协程或另一个挂起函数内部调用。例如delay函数就是一个挂起函数:

import kotlinx.coroutines.*

fun main() = runBlocking {
    launch {
        println("开始延迟")
        delay(2000) // 暂停协程2秒
        println("延迟结束")
    }
}

在协程中处理异常

  1. 使用try - catch块:在协程内部可以使用常规的try - catch块来捕获异常。
import kotlinx.coroutines.*

fun main() = runBlocking {
    launch {
        try {
            throw Exception("模拟异常")
        } catch (e: Exception) {
            println("捕获到异常: ${e.message}")
        }
    }
}
  1. 使用CoroutineExceptionHandler:可以创建一个CoroutineExceptionHandler并将其传递给GlobalScope.launch或其他协程构建器来处理未捕获的异常。
import kotlinx.coroutines.*

val handler = CoroutineExceptionHandler { _, exception ->
    println("全局捕获到异常: ${exception.message}")
}

fun main() = runBlocking {
    GlobalScope.launch(handler) {
        throw Exception("模拟异常")
    }
    delay(1000)
}