安卓工具相关

Kotlin中协程的基本使用

2019-02-14  本文已影响116人  涂山小狐妖

1.协程的创建方式

1.使用 launch()

GlobalScope.launch {
        delay(3000)
    }
public fun CoroutineScope.launch(
    context: CoroutineContext = EmptyCoroutineContext,
    start: CoroutineStart = CoroutineStart.DEFAULT,
    block: suspend CoroutineScope.() -> Unit
): Job {
    val newContext = newCoroutineContext(context)
    val coroutine = if (start.isLazy)
        LazyStandaloneCoroutine(newContext, block) else
        StandaloneCoroutine(newContext, active = true)
    coroutine.start(start, coroutine, block)
    return coroutine
}

context :

接收一个可选的 CoroutineContext 参数,是一些元素的集合,主要包括 Job 和 CoroutineDispatcher 元素。可以代表一个协程的场景。默认值EmptyCoroutineContext,表示运行在父协程的上下文中。 其他值如下

  1. Dispatchers.Unconfined :协程调度器会在程序运行到第一个挂起点时,在调用者线程中启动。挂起后,它将在挂起函数执行的线程中恢复,恢复的线程完全取决于该挂起函数在哪个线程执行。非受限调度器适合协程不消耗 CPU 时间也不更新任何限于特定线程的共享数据(如 UI)的情境。

  2. Dispatchers.Default : 将会获取默认调度器,使用共享的后台线程池

  3. newSingleThreadContext("MyOwnThread") :将使它获得一个新的线程, 在真实的应用程序中两者都必须被释放,当不再需要的时候,使用 close 函数,或存储在一个顶级变量中使它在整个应用程序中被重用。

  4. Dispatchers.IO : 运行在IO线程中

  5. Dispatchers.Main : 运行在主线程中

  6. newFixedThreadPoolContext(2,"ss"):运行在一个新的线程池里面,当不再需要的时候,使用 close 函数,或存储在一个顶级变量中使它在整个应用程序中被重用。

start :

协程启动的设置,一般使用默认值,还未遇到使用其他值的情况

block :

需要再协程中执行的代码

返回值是一个Job对象

2.使用 async()

GlobalScope.async {
        delay(3000)
    }

3.使用 withContext{}

 GlobalScope.async (Dispatchers.Main) {
                withContext(coroutineContext){
                    delay4s()
                }
        }

4.使用 runBlocking {}

fun main() = runBlocking {
    delay(1000)
}



2. Job & Deferred

在这里插入图片描述
上一篇 下一篇

猜你喜欢

热点阅读