一篇文章揭开一篇文章揭开Kotlin协程的神秘面纱协程的神秘面纱
前言前言
Kotlin协程提供了一种新的异步执行方式,但直接查看库函数可能会有点混乱,本文中尝试揭开协程的神秘面纱。
理论理论
它是什么它是什么
这是别人翻译: 协程把异步编程放入库中来简化这类操作。程序逻辑在协程中顺序表述,而底层的库会将其转换为异步操作。
库会将相关的用户代码打包成回调,订阅相关事件,调度其执行到不同的线程(甚至不同的机器),而代码依然想顺序执行那
么简单。
我的理解:子任务程协作运行,优雅的处理异步问题解决方案。
它能干什么它能干什么?
我在做安卓开发,它能替换掉Handler,AsyncTask 甚至是Rxjava来优雅的解决异步问题。
下面让我们从基础开始吧,假设有一个名为launch可以用来启动协程
private fun myHeavyFunction() {
Log.e("Thread Running ", Thread.currentThread().name)
}
val job = launch { myHeavyFunction() }
上面的代码是使用launch一种非常简单的方法,返回Job一个异步执行函数,Job代表一个协程coroutine作业,可以取消或查
询它的状态。
override fun onStop() {
if (job.isActive) {
job.cancel()
}
}
现在,如果查看我们的日志,检查我们的函数实际运行的是哪个线程?我们就会得到类似的结果
E / Thread运行:ForkJoinPool.commonPool-worker-2
我们的代码是在一个线程中运行的,让我们稍微了解一下launch本身:
public fun launch(
context:CoroutineContext =DefaultDispatcher,
start:CoroutineStart CoroutineStart.DEFAULT,
parent:Job?=null,
onComp1etion:CompletionHand1er? =null,
block:suspend CoroutineScope.()->Unit
):Job{
再看看DefaultDispatcher的值是什么?