Coroutine(协程)是什么玩意?
协程名字听起来很玄乎,其实他是很简单的。
所谓协程,就是相互协作的程序。
一个协程代表着:几段互相帮助,互相协作的代码。
举个简单的例子:
在Android中,我们在ui线程中做与界面相关的操作。
但我们经常会遇到磁盘的读写,网络的请求,这些繁琐耗时的操作我们是在另外一个线程的处理,等这些操作完成后,我们再把结果显示到界面上。
以上就是一种协作,总结下:
- ui线程把耗时操作的代码块交给其他线程来处理
- 其他线程处理处理完成后,把结果交付给ui线程显示
其实以上的例子就是所谓的异步问题
如何处理异步问题?
有很多种方法:
- 开启一起线程处理
- 利用AsyncTask
- 利用CallBack
- 利用RxJava
OK,协程可以更加人性化,写出来的代码更加人性化一些,很直观的看出哪些代码在互相协作,看下面的对比:
协程 vs 回调
1. 异步计算
2. 异步UI
看了上面的例子,是不是感觉:
协程中最大的特色:将异步代码写的干净清晰!
协程的基本使用
-
启用一个协程
-
启用一个可阻塞当下线程的协程
-
主动去等待一个协程完成
-
重构,将代码组织进一个函数内,这个函数被 suspend修饰
其他:
- 协程是可以被取消的和超时控制
- 可以组合被挂起的函数
- 协程中运行环境的指定,也就是线程的切换
具体的文档在这里:https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md
协程的内部是如何工作的?
以下只是简单的说一说,来自官网
建议看下我的这篇文章:同步编程 vs 异步编程
关于协程中的API
kotlin中的协程目前还处于试验性阶段。
kotlin标准库提供了最基本的api。
想要使用一些奇技淫巧,目前有一些支持库可供参考:
- kotlinx.coroutines
- AsyncAwait
参考
- coroutines
- kotlinx.coroutines
- kotlin-coroutines-informal
文章写的还不完善,好多地方没有提到,后续继续更新。
白话kotlin系列
- 白话kotlin:向空指针异常说再见
- 白话kotlin:lambda表达式和高阶函数是什么玩意?
- 白话kotlin:内联函数助你提升运行效率
- 白话kotlin:用协程来愉快的处理异步问题
- 白话kotlin:有意思的拓展
- 白话kotlin:简单的理解 关键词object