https://www.bbsmax.com/A/kmzLNEBA5G/
https://blog.51cto.com/u_15548643/5153793(结合实例代码更易懂)
https://zhuanlan.zhihu.com/p/427092689(知乎)
https://www.jianshu.com/p/e4e7ae9473de(原理性讲解)
依赖包
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:x.x.x'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:x.x.x"
梳理
- 启动协程的方法
- 挂起函数
launch方法
-
默认launch方法
线程A-代码1 // 创建一个默认参数的协程,其默认的调度模式为Main 也就是说该协程的线程环境是Main线程 mScope.launch { // 这里就是协程体 // 协程将线程的执行权交出去,该线程A该干嘛干嘛,线程A代码执行完毕后会恢复至此继续向下执行 Log.d(TAG,"aaaa") delay(1000) Log.d(TAG,"bbbb") } 线程A-代码2 ... 线程A代码执行完毕
-
launch(Dispatchers.IO)
// 创建一个指定了调度模式的协程,该协程的运行线程为IO线程 val job2 = mScope.launch(Dispatchers.IO) { // 此处是IO线程模式 // 切线程 将协程所处的线程环境切至指定的调度模式Main withContext(Dispatchers.Main) { // 现在这里就是Main线程了 可以在此进行UI操作了 } }
##### Dispatchers 有哪些值
- Dispatchers.Main:Android 主线程。用于调用 suspend 函数,UI 框架操作,及更新 LiveData 对象。
- Dispatchers.IO:非主线程。用于磁盘操作(例如,Room 操作),及网络 I/O 请求(例如,调用服务器 API)。
- Dispatchers.Default:非主线程,用于 CPU 密集型操作。例如,list 排序,及 JSON 解析。
这里需要注意的是,在 launch 不加参数时,其默认值是 Dispatchers.Main,而不是 Dispatchers.Default。
0 条评论