MST

星途 面试题库

面试题:Kotlin协程在Android中如何处理异步任务的取消

在Android开发中使用Kotlin协程处理异步任务,假设你有一个在协程中执行网络请求的场景,当用户关闭相关界面时,需要取消这个网络请求任务。请描述如何实现协程任务的取消,并给出相关代码示例。
19.0万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试

实现协程任务取消的步骤

  1. 创建协程作用域:使用CoroutineScope来管理协程的生命周期。
  2. 在协程作用域内启动协程:在该协程中执行网络请求。
  3. 取消协程:当用户关闭相关界面时,调用协程作用域的cancel方法来取消协程。

代码示例

import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import kotlinx.coroutines.*

class MainActivity : AppCompatActivity() {
    private lateinit var scope: CoroutineScope

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        scope = CoroutineScope(Job() + Dispatchers.Main)

        val startButton: Button = findViewById(R.id.startButton)
        val cancelButton: Button = findViewById(R.id.cancelButton)

        startButton.setOnClickListener {
            scope.launch {
                // 模拟网络请求
                delay(5000)
                println("网络请求完成")
            }
        }

        cancelButton.setOnClickListener {
            scope.cancel()
            println("协程已取消")
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        scope.cancel()
    }
}

在上述代码中:

  1. CoroutineScope通过Job()Dispatchers.Main创建,Job()用于管理协程生命周期,Dispatchers.Main确保在主线程执行。
  2. 点击startButton启动一个协程,模拟一个5秒的网络请求。
  3. 点击cancelButton或界面销毁时,调用scope.cancel()取消协程,从而取消网络请求任务。