kotlin: 协程作用域

一,常见的协程作用域

协程的作用域用于统一管理协程,包括跟踪所有协程和取消所有协程。

常见的协程作用域有:

  • GlobalScope:它是一种顶级协程。生命周期是进程级别的,只要应用进程还在运行,即使 Activity 或 Fragment 被销毁,此作用域下的协程仍然会执行。
  • MainScope:只能在 Activity 中使用,使用 MainScope 时,需要在 onDestroy 中调用 cancel() 取消协程。
  • viewModelScope,只能在 ViewModel 中使用,它会绑定 ViewModel 的生命周期
  • lifecycleScope,只能在 Activity、Fragment 中使用,它会绑定 Activity 和 Fragment 的生命周期。

二,例子一: MainScope

class MainActivity : AppCompatActivity() {
    private val mainScope = MainScope()
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        mainScope.launch {
            // do something
        }
    }

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

也可以使用 Kotlin 中的 by 关键字,通过代理模式将 MainActivity 变成 MainScope:

class MainActivity : AppCompatActivity(), CoroutineScope by MainScope() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        launch {
            // do something
        }
    }

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

三,例子二:

class MainViewModel() : ViewModel() {
    // 在布局文件中配置的属性
    val student = MutableLiveData<Student>()

    // 该方法用于刷新数据
    fun setStudentData() {
        viewModelScope.launch {
            student.value = Student("Tom", 18)
        }
    }
}

data class Student(val name: String, val age: Int)

 

posted @ 2025-08-09 13:41  刘宏缔的架构森林  阅读(47)  评论(0)    收藏  举报