协程Couroutines的初步认知
一、什么是Kotlin 协程
协程(Coroutine)就是协同程序,而Kotlin协程就是一个基于Java Thread API封装的工具包,帮助我们轻松的写出复杂的并发代码
kotlin协程相较于线程池,并没有什么性能上的优势
非阻塞式挂起没什么特别的,java子线程也同样是非阻塞式的
如果你熟悉Rxjava,你再对比一下协程,你会发现协程比Rxjava还好用
解决回调地狱的问题
二、Coroutines的优势、特点
-
轻量
-
实质,便于多线程开发
-
线程池
-
网络库支持,轻便优雅
三、知识点速览
常见协程函数
函数名 | 简述特点 |
---|---|
runBlocking:T | 启动的内部协程,会阻塞当前线程,直到block内的协程执行结束。常用的协程函数调用方式 |
launch:Job | 最常用的启动协程的方式;返回Job对象,可操作Job;不会阻塞当前调用线程; |
async:Deferred | 类似于launch,启动异步;可用于多并发;await合并结果 |
-
CoroutineContext
-
Dispatchers.Main、
-
Dispatchers.IO、Dispatchers.default(在线程池中执行)
-
Dispatchers.Unconfined
-
-
LauncherMode
Mode Value default 默认,立即执行协程 lazy 需要时执行 atomic 立即执行,操作原子化,开始前无法取消 undispatched 立即在当前线程执行,直到第一个suspend调用 -
suspend函数
-
suspend函数会将整个协程挂起,而不仅仅是这个suspend函数,也就是说一个协程中有多个挂起函数时,它们是顺序执行的
-
resume
-
调用栈
-
-
Scope
-
UI
-
ViewModel
-
四、处理异步的方式
-
线程
-
常用,简便
-
资源消耗
数量受限
平台支持(JS无线程)
调试使用不便
-
-
回调
-
层次调用
-
多重嵌套
错误处理麻烦
-
-
Futures、 Promise
-
编程优雅
-
改变编程方式,如异常处理与循环作用等,在其中无效
Api学习,平台差异
返回类型限定promise
异常处理复杂
-
-
Rx响应式扩展
-
可观察流的设计思想,优雅便捷
-
学习曲线
Api
行为难估
-
-
协程
-
易学、易用
-
jetpack,kotlin,aac,scope/vvm
-
学习成本
-