首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin1.3版本的协程

协程的开发人员 Roman Elizarov 是这样描述协程的:协程就像非常轻量级的线程。线程是由系统调度的,线程切换或线程阻塞的开销都比较大。而协程依赖于线程,但是协程挂起时不需要阻塞线程,几乎是无代价的,协程是由开发者控制的。所以协程也像用户态的线程,非常轻量级,一个线程中可以创建任意个协程。

使用Kotlin的协程

添加依赖:库在Kotlin1.3版本的时候已经升级为稳定版,命名为1.0.0,目前最新版是1.0.1

也可以添加Android的依赖:

开启协程的方法:

在线程环境中可直接使用启动一个新的协程,它的参数有如下三个,分别为:

:协程上下文

:启动模式,默认是,也就是创建就启动;还有一个是,意思是等你需要它的时候,再调用启动。在Kotlin 1.3版本中,还有和两个额外的模式,但是现在还是实验版,这里不多介绍。

:闭包参数,定义协程内需要执行的操作。

返回值为Job对象。有如下几个重要的方法,分别为:

可配合启动一个协程

等待协程执行完毕

注意:函数是一个挂起函数,所有必须被修饰。

取消一个协程

等待协程执行完毕然后再取消

也是一个挂起函数。

从上面的代码和输出可以看到,协程中的输出和中的输出只相差了1s,也就说明了为什么是非阻塞的。函数类似于,但是它不阻塞(non-blocking)线程,它是一个被修饰的挂起函数,挂起函数只能被挂起函数调用或协程中调用。

和参数是一模一样的,不同的是返回的是对象,它继承了接口,所以说有的它都有,并且还额外增加了一个方法:

这个方法接收的是闭包中返回的值。如果闭包中需要返回一个值那么我们就需要考虑用了。

的最大特点就是它的可以阻塞当前的线程,和有着相同的效果,看下面代码:

乍一看,这不和上面的一样么,只是替换成了而已,但是大家可以仔细看一看输出,两次输出之间的时间差为2s,也就是说中的确确实实的把当前线程给阻塞了,让当前线程也睡眠了1s。而通过开启的协程中却不是如此,这就是二者的不同之处之一。

所以我们一般用来桥接普通阻塞代码和挂起风格的非阻塞代码,在闭包里面启动另外的协程。

实际运用

就拿最常用的网络请求为例吧,如果我们不用Kotlin的协程来实现,我们可以用、等等很多种方法,那么我们来看看协程是怎么实现的吧。

用在IO线程中去执行网络请求,然后通过返回请求结果,用在主线程中更新UI就行了。

其中我们用了来指定协程所在的线程,目前有三种:、、

:如果没有指定具体的都会使用默认的,它使用的是最大的线程数。

:用来调度阻塞的协程

:就是常说的UI线程了,是Android特有的。

协程的知识点还有很多很多,这里只能带大家简单了解一下稳定版的coroutines,想要了解更多大家可以去Kotlin中文文档详细学习。下面贴出中文文档地址。

https://www.kotlincn.net/docs/reference/coroutines/basics.html

写在最后

每个人不是天生就强大,你若不努力,如何证明自己,加油!

Thank You!

--Taonce

如果你觉得这篇文章对你有所帮助,那么就动动小手指,长按下方的二维码,关注一波吧~~非常期待大家的加入

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181120G0CKBO00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券