feat: 协程文档更新
This commit is contained in:
parent
36631ab107
commit
0ede383062
@ -1 +1,50 @@
|
||||
# Kotlin协程从入门到入土
|
||||
# Kotlin协程从入门到入土
|
||||
|
||||
## 0x00 什么是协程
|
||||
协程,英文Coroutines,是一种比线程更加轻量级的存在。
|
||||
|
||||
协程不是进程,也不是线程,它就是一个可以在某个地方挂起的特殊函数,并且可以重新在挂起处继续运行。所以说,协程与进程、线程相比,不是一个维度的概念。
|
||||
|
||||
协程已经在Python、JS等许多编程语言上有所实现,一般情况下,协程被认为是比线程更轻量级的异步事件处理方式,所谓协程,是在编程语言层面上对同时执行多个异步任务上的实现。
|
||||
|
||||
> 协程通过将复杂性放入库来简化异步编程。程序的逻辑可以在协程中顺序地表达,而底层库会为我们解决其异步性。该库可以将用户代码的相关部分包装为回调、订阅相关事件、在不同线程(甚至不同机器!)上调度执行,而代码则保持如同顺序执行一样简单。
|
||||
>
|
||||
> 协程是一种并发设计模式,您可以在Android平台上使用它来简化异步执行的代码
|
||||
|
||||
简单来说,协程可以帮助开发者以同步方式编写异步代码,解决以往编写异步程序时出现的“回调地狱”的问题。
|
||||
|
||||
## 0x11 Kotlin上协程的分类
|
||||
|
||||
### 创建最简单的协程
|
||||
|
||||
先上代码:
|
||||
```Kotlin
|
||||
// 调用阻塞式协程
|
||||
runBlocking {
|
||||
Log.d("runBlocking", "启动一个协程")
|
||||
}
|
||||
|
||||
// 调用launch启动协程
|
||||
GlobalScope.launch {
|
||||
Log.d("launch", "启动一个协程")
|
||||
}
|
||||
|
||||
// 调用async启动协程
|
||||
GlobalScope.async {
|
||||
Log.d("async", "启动一个协程")
|
||||
}
|
||||
```
|
||||
如上面代码所示,Kotlin中创建启动协程主要有3种方式:
|
||||
1. runBlocking - 启动一个阻塞式协程,协程体代码块内代码会阻塞所在线程,返回值为泛型T,就是在协程体内最后一行返回的数据类型
|
||||
2. launch - 启动一个非阻塞式协程,必须在协程作用域(CoroutineScope)内启动,但不会阻塞所在线程,返回值为Job
|
||||
3. async - 启动一个非阻塞式协程,必须在协程作用域(CoroutineScope)内启动,但不会阻塞所在线程,返回值为一个Deferred<T>,T泛型为协程体内最后一行返回的数据类型
|
||||
|
||||
- 协程的返回类型
|
||||
1. runBlocking的泛型返回值T
|
||||
runBlocking在默认情况下类似于一个封装好的方法,当然可以通过指定该方法运行的线程,让这个方法不阻塞主线程,这样就类似于我们在Java中的Thread,并且将run方法执行的结果最终返回回来,这里不做过多讨论。
|
||||
|
||||
2. launch的返回类型Job
|
||||
3. async的返回类型Deferred<T>
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user