java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Kotlin Coroutines异步协程

Kotlin-Coroutines中的async与await异步协程管理

作者:ZoranLee

这篇文章主要为大家介绍了Kotlin-Coroutines中的async与await异步协程管理,提升程序性能解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Coroutines

官网说明

什么是协程?(摘自官网)

简单概括 

协程的创建/启动

协程作用域(CoroutineScope)

GlobalScope 全局顶级协程 (现在 GlobalScope 类已被 @DelicateCoroutinesApi 注解所标记) 全局范围
启动一个协程:

CoroutineScope https://developer.android.com/topic/libraries/architecture/coroutines

MainScope 主线程的作用域,全局范围

lifecycleScope 生命周期范围,用于activity等有生命周期的组件,DESTROYED结束。

class MyFragment: Fragment() {
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        viewLifecycleOwner.lifecycleScope.launch {
            val params = TextViewCompat.getTextMetricsParams(textView)
            val precomputedText = withContext(Dispatchers.Default) {
                PrecomputedTextCompat.create(longTextContent, params)
            }
            TextViewCompat.setPrecomputedText(textView, precomputedText)
        }
    }
}
 class MyViewModel: ViewModel() {
    init {
        viewModelScope.launch {
            // Coroutine that will be canceled when the ViewModel is cleared.
        }
    }
}
val user: LiveData<User> = liveData {
    val data = database.loadUser() // loadUser is a suspend function.
    emit(data)
}

异步、并发、并行

异步

并发

并行

并发就是一次处理很多事情,并行就是一次做很多事情

协程中的并发和并行

import kotlinx.coroutines.*
import kotlin.system.measureTimeMillis
fun main(args: Array<String>) =
    runBlocking {
        val time = measureTimeMillis {
            val one = async { doSomethingUsefulOne() }
            val two = async { doSomethingUsefulTwo() }
            println("The answer is ${one.await()} ${two.await()}")
        }
        println("Completed in $time ms")
    }
suspend fun doSomethingUsefulTwo() :Int{
    delay(1000L)
    println("two")
    return  2
}
suspend fun doSomethingUsefulOne():Int {
    delay(1000L)
    println("one")
    return  1
}

 结果

one
two
The answer is 1 2
Completed in 1020 ms

并行

suspend fun doSomethingUsefulOne(): BigInteger = withContext(Dispatchers.Default) {
    measureTimedValue {
        println("in doSomethingUsefulOne")
        BigInteger(1500, Random()).nextProbablePrime()
    }
}.also {
    println("Prime calculation took ${it.duration} ms")
}.value

以上就是Kotlin-Coroutines中的async与await异步协程管理的详细内容,更多关于Kotlin Coroutines异步协程的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文