admin管理员组文章数量:1643280
前言
一直以为对于Kotlin,自己算是能够应付正常开发了….进了头条之后,才发现别说是应付开发了,简直是差得远呢。由其是参与到Kotlin程度化极高的大型项目中,这种差距感非常之大。最近在看代码的时候,很是疑惑。项目中竟然没有出现Thread。后来才发现是自己孤陋寡闻,整个项目已经用协程全面替换了Thread。所以今天就来好好记录一下:协程这么一个知识点。
正文
协程其实是Kotlin中比较早出现的内容,不过最近才释放了正式版。我们想要使用也比较的简单:提一下Kotlin的版本,比如:
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.0'
依赖一下协程的包:
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.0.0'
开篇先聊一聊协程的作用是啥?为啥整个项目直接用协成替换了Thread?它又是如何能够在如此大的项目中直接扮演Thread这么重要的角色?
首先来上一段概念:协程是一个轻量级的线程。接下来用一个官方的demo,解释一下协程为什么能够被如此重视(Kotlin demo):
Demo很简单,开启10w个协程。等等?启动10w个??没错,这里可以很顺畅的启动10w个!这里我们想想,如果我们启动10w个Thread会是什么样子。笑哭.png~
从这上边来看,协程的确可以称的上轻量级。那么,协程的优点仅此而已么?不着急,我们一点点来看。
1.1、用法
协程的写法很简单:
单纯这样,似乎不是很清晰,我们看一下另一种写法:
想要launch一下协程,前提是需要一个协程上下文环境,说白了就是Kotlin帮我们去完成线程的调度。而这里GlobalScope.launch就是创建一个协程环境并且启动一个协程。我们上述代码传的参数:Dispatchers.Default、newSingleThreadContext("MyThread")就是更换协程上下文环境。
协程上下文包括了一个 协程调度器,它确定了相应的协程在执行时使用一个或多个线程。协程调度器可以将协程的执行局限在指定的线程中,调度它运行在线程池中或让它不受限的运行。
不过,没事不要轻易newSingleThreadContext("MyThread"),newSingleThreadContext会为协程的运行启动了一个新的线程。 既然起一个新的线程,那么协程就没啥意义了~所以正常使用交给默认去做就OK了。
1.2、取消
协程中,我们可以很轻易的对这个任务进行取消。
当然,这里面涉及一些父协程,子协程的顺序、细节问题。有兴趣的话可以在文档中查看。PS:一般也用不到,一个协程走天下。
2.1、async/await
协程好玩的地方就在于这个功能。我们想一个功能:正常在Java中,我们想在Thread中得到返回值。一般来说我们会通过CallBack,比如:
而协程给出来的解决方案可就方便的多。
async需要运行在一个协程环境之中,所以我们这里用了一个GlobalScope.launch。
async会返回一个Deferred对象,在async方法结束的时候,就会调用await()方法。因此,我们可以通过await()就可以得到异步回调。有了这个特性,我们网络请求的时候就会非常的方便。
尾声
似乎收尾的有些唐突,不过水平有限,目前就简单记这些内容吧,因为自己也是刚起手开始用。等自己在项目中熟练掌握,并且跟同事们学精了之后,再继续总结新的内容。所以,不着急一步一步来。
版权声明:本文标题:kotlin 用协程做网络请求_聊一聊Kotlin中的协程,真香 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1729357095a1198364.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论